MPVolumeView路由按钮不一致显示

时间:2016-01-08 16:31:01

标签: ios objective-c airplay mpvolumeview

我在视频叠加层中使用MPVolumeview来使用路线按钮并连接到airplay。我隐藏了MPVolume的音量滑块。我试图调整叠加层的大小,以便仅在airplay可用时包含路线按钮的框架。以前我一直在MPVolumeView中的路由按钮上使用观察者,如下所示:

for (UIView *view in volumeButton.subviews) {
    if ([view isKindOfClass:[UIButton class]]) {
        airplayButton = [view retain];
        [airplayButton addObserver:self forKeyPath:@"alpha" options:NSKeyValueObservingOptionNew context:nil];
    }
}

然后我设置一个布尔属性来跟踪按钮是否可见。最近我在iPhone 6上发现路线按钮并不是一直显示在视频上。我回顾了MPVolumeView,发现现在有一个名为 areWirelessRoutesAvailable 的属性,所以我逐步完成了代码,发现这个属性并不一致。我在 awakeFromNib 中设置了MPVolumeView,并且对MPVolumeView的检查位于 layoutsubviews 中。有没有更好的方法来检查airplay的可用性,路由按钮是否一直显示MPVolumeView的问题或我错过了什么?

1 个答案:

答案 0 :(得分:0)

您可以为MPVolumeViewWirelessRoutesAvailableDidChangeNotification添加观察者,并在收到通知时调整叠加层的大小。

    - (void)viewWillAppear:(BOOL)animated {
      [[NSNotificationCenter defaultCenter] addObserver:self
                                               selector:@selector(handleWirelessRoutesDidChange:)
                                                   name:MPVolumeViewWirelessRoutesAvailableDidChangeNotification object:nil];
    }

    - (void)viewWillDisappear:(BOOL)animated {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }

    - (void)handleWirelessRoutesDidChange:(NSNotification *)notification {
        NSLog(@"Wireless routes did change: %@", notification);
        // Resize the overlay
    }