我正在使用 MPMoviePlayerController 开发支持 AirPlay 的 iPhone 应用程序。但是,我需要在我的自定义 View 中显示这个 AirPlay 按钮。因此,我采用 MPVolumeView 并将其添加到我的自定义 View 中;从 MPVolumeView 中删除了除 AirPlay 按钮之外的所有 subview 。
问题是:
我可以更改音量 View 的框架,使其适合 AirPlay 按钮大小的自定义 View 的角落吗?我知道可以以编程方式处理这个问题;这样做是否有效?链接Customize the Airplay button's appearance提到我们不应该改变 AirPlay 按钮的形状和位置。
我需要将自定义图像设置为 AirPlay 按钮,以使其在美学上与我的自定义 View 相匹配。我该怎么做?
只要不存在带有 AirPlay 的设备,AirPlay 按钮就会从 MPVolumeView 中消失。按钮消失时是否有任何通知?当 AirPlay 按钮不存在时,我需要调整我的自定义 View 。有什么方法可以识别 AirPlay 按钮是否存在? MPVolumeView subviews 数组有这个按钮,即使在 MPVolumeView 中不显示也不处于隐藏状态。
你应该看看这个答案:Customize the Airplay button's appearance
这与我的回答基本相同,但更详细。我认为它回答了你的大部分问题。
为了您的方便,把它粘贴在这里:
在接受@Erik B 的回答并将赏金授予他之后,我发现需要进行更多调整才能使其正常工作。我在这里发帖是为了 future 的 SO 搜索者。
我看到的问题是按钮的内部机制会根据当前的播放状态分配图像。因此,如果 Airplay 接收器消失或状态以某种方式改变,我在初始化期间所做的任何自定义都不会保留。为了解决这个问题,我在按钮的 alpha
键上设置了一个 KVO 观察。我注意到按钮总是淡入/淡出,这是 alpha
上的动画。
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectZero];
[volumeView setShowsVolumeSlider:NO];
for (UIButton *button in volumeView.subviews) {
if ([button isKindOfClass:[UIButton class]]) {
self.airplayButton = button; // @property retain
[self.airplayButton setImage:[UIImage imageNamed"airplay.png"] forState:UIControlStateNormal];
[self.airplayButton setBounds:CGRectMake(0, 0, kDefaultIconSize, kDefaultIconSize)];
[self.airplayButton addObserver:self forKeyPath"alpha" options:NSKeyValueObservingOptionNew context:nil];
}
}
[volumeView sizeToFit];
然后我观察按钮 alpha
的变化值。
- (void)observeValueForKeyPathNSString *)keyPath ofObjectid)object changeNSDictionary *)change contextvoid *)context {
if ([object isKindOfClass:[UIButton class]] && [[change valueForKey:NSKeyValueChangeNewKey] intValue] == 1) {
[(UIButton *)object setImage:[UIImage imageNamed"airplay.png"] forState:UIControlStateNormal];
[(UIButton *)object setBounds:CGRectMake(0, 0, kDefaultIconSize, kDefaultIconSize)];
}
}
如果你销毁按钮,别忘了移除观察者
- (void)dealloc {
[self.airplayButton removeObserver:self forKeyPath"alpha"];
…
}
根据代码观察,如果 Apple 更改 MPVolumeView
的内部 View 层次结构以添加/删除/更改 View ,从而出现不同的按钮,则按钮将中断。这使得它有点脆弱,所以使用风险自负,或者想出一个计划 b,以防发生这种情况。我已经在生产中使用它一年多了,没有任何问题。如果您想查看它的实际效果,请查看 Ambiance 中的主播放器屏幕
关于ios - 自定义 View 上的 AirPlay 按钮 - 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5388884/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |