この問題を 2 日間解決しようとしてきましたが、あきらめました。カスタマイズされたエアプレイ ボタンを実装しようとしています (背景が白で、ボタンが黒でなければならないためです)。interfacebuilder にビューを追加し、mpVolumeView を選択しました。次に、接続を作成し、次のコードを書きました。
viewDidLoad.. {
.....
[_volumeView setShowsVolumeSlider:NO];
for (UIButton *button in _volumeView.subviews) {
if ([button isKindOfClass:[UIButton class]]) {
[button setImage:[UIImage imageNamed:@"airplay_icon.png"] forState:UIControlStateNormal];
[button addObserver:self forKeyPath:@"alpha" options:NSKeyValueObservingOptionNew context:nil];
[button addTarget:self action:@selector(switchAirplayButton) forControlEvents:UIControlEventTouchUpInside];
[button sizeToFit];
}
}
[_volumeView sizeToFit];
}
-(void)switchAirplayButton {
for (UIButton *button in _volumeView.subviews) {
if ([button isKindOfClass:[UIButton class]]) {
NSLog(@"%d", _controlBar.player.airPlayVideoActive);
if(_controlBar.player.airPlayVideoActive) {
[button setImage:[UIImage imageNamed:@"airplay_icon_pressed.png"] forState:UIControlStateNormal];
} else [button setImage:[UIImage imageNamed:@"airplay_icon.png"] forState:UIControlStateNormal];
[button sizeToFit];
}
}
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([object isKindOfClass:[UIButton class]] && [[change valueForKey:NSKeyValueChangeNewKey] intValue] == 1) {
[(UIButton *)object setImage:[UIImage imageNamed:@"airplay_icon.png"] forState:UIControlStateNormal];
[(UIButton *)object sizeToFit];
}
}
「プレーヤー」は、AVPLayer に基づくシングルトンです。ただし、airPlay がアクティブかどうかを確認するときは常に false を返します。映像ではなく音声を使っているからかもしれません。
私の質問は、ボタンを次のように変更するにはどうすればよいかということです...エアプレイがストリーミングされているときに(アップルが青にしているように)オレンジ色のボタンを言ってみましょう(インターフェイスの残りの部分と一致させるためだけに)。私はすべてを試しましたが、まったく機能していません。私を助けてください。