標準コントロールと一緒にMPMoviePlayerControllerのビューにUIButtonを追加しようとしています。このボタンはビデオ上に表示され、予想される受信タッチイベントとして機能しますが、ユーザーの接触に応じて標準コントロールでフェードインまたはフェードアウトしたいと考えています。MPMoviePlayerControllerコントロールでフェード表示するUIButtonを追加する
私は自分のカスタムプレーヤーコントロールをローリングすることでこれを達成できると知っていますが、ボタンを1つ追加しようとしているので愚かなようです。
EDIT
あなたは再帰的にMPMoviePlayerControllerのビューのビュー階層を横断した場合、最終的にあなたがMPInlineVideoOverlayというビューのクラスに来ます。このビューに追加のコントロールを簡単に追加して、自動フェードイン/アウトの動作を実現できます。
いくつかの落とし穴ががありますが、それは時々あなたがMPMoviePlayerController作成した後に(私の経験では秒まで)時間がかかるし、それが完全に初期化される前のビューに追加して、それがMPInlineVideoOverlayだ作成することができます層。このため、私はこのコードが実行されるときに時々存在しないので、という名前のインスタンス変数をcontrolView以下のコードで作成しなければなりませんでした。これは、関数が0.1秒後に再び呼び出されるコードが見つからない場合に、最後のコードがある理由です。私は、この遅れにもかかわらず、私のインターフェイスに表示されるボタンの遅延を気付くことができませんでした。
-(void)setupAdditionalControls {
//Call after you have initialized your MPMoviePlayerController (probably viewDidLoad)
controlView = nil;
[self recursiveViewTraversal:movie.view counter:0];
//check to see if we found it, if we didn't we need to do it again in 0.1 seconds
if(controlView) {
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[controlView addSubview:backButton];
} else {
[self performSelector:@selector(setupAdditionalControls) withObject:nil afterDelay:0.1];
}
}
-(void)recursiveViewTraversal:(UIView*)view counter:(int)counter {
NSLog(@"Depth %d - %@", counter, view); //For debug
if([view isKindOfClass:NSClassFromString(@"MPInlineVideoOverlay")]) {
//Add any additional controls you want to have fade with the standard controls here
controlView = view;
} else {
for(UIView *child in [view subviews]) {
[self recursiveViewTraversal:child counter:counter+1];
}
}
}
これは最適な解決策ではありませんが、他の誰かが同じことをしようとしている場合に投稿しています。 Appleがコントロールオーバーレイの内部のビュー構造またはクラス名を変更すると、それが壊れてしまいます。また、ビデオをフルスクリーンで再生していないと仮定しています(ただし、埋め込みコントロールでフルスクリーンで再生できます)。私もそれが押されたときにMPInlineVideoOverlayビューが削除され、リリースされるので、ここに記載されている技術を使用してフルスクリーンボタンを無効にする必要がありました:あなたは、上記のフルスクリーンの通知を受信したときiPad MPMoviePlayerController - Disable Fullscreen
はsetupAdditionalControlsを呼び出す再追加されますあなたのUIへの追加のコントロール。
誰かが私が思いついたこのハッカー以外の何かを提案できるなら、より洗練されたソリューションが大好きです。
'MPInlineVideoOverlay'クラスを見つけるのではなく、 'MPFullScreenTransportControls'クラスを見つけようとしています。 –