iPhone MPMoviePlayerコントロールが/消えて表示されたときに検出する方法は?
-
20-09-2019 - |
質問
私はMPMoviePlayerControllerビュー(OS 2.xとアップ)で、標準的な巻き戻し/再生/フォワードコントロールの左右にカスタムボタンを追加しようとしています。私はプレーヤーウィンドウに追加する方法を考え出したが、彼らは常に表示しています。標準コントロールが表示されたときに検出して消えする方法はありますか?
解決
[OK]を、それを得た、このように行います:
BOOL controlsVisible = NO;
for(id views in [[_moviePlayer view] subviews]){
for(id subViews in [views subviews]){
for (id controlView in [subViews subviews]){
controlsVisible = ([controlView alpha] <= 0.0) ? (NO) : (YES);
}
}
}
NSLog(@"player controls are visible: %d", controlsVisible);
ここでの _movePlayer のプレイヤーのインスタンスです。 コントロールが示されている場合は最も深いループでは、のMPFullScreenVideoOverlay のビュー・インスタンスは、コントロールが隠されている場合、アルファ== 0.0を有する、またはアルファ1.0であろう。 あなたはオブザーバを追加し、必要に応じて物事を発射することができます。私はエレガントではありません知っているが、Appleは、このタスクについて何かを文書化していないとして、それは、私のために動作します。
乾杯...
他のヒント
cybercowの答えは右だけで答えは、より正確にするために少し変更を追加する必要がありますされます。
BOOL controlsVisible = NO;
for(id views in [[self.moviePlayerViewController view] subviews])
{
for(id subViews in [views subviews])
{
for (id controlView in [subViews subviews])
{
if ([controlView isKindOfClass:[UIView class]] && ((UIView*)controlView).tag == 1004)
{
controlsVisible = ([controlView alpha] <= 0.0) ? (NO) : (YES)
}
}
}
}
私は最も内側のループを変更しました。それは、より正確に動作しますので、実際には1004 MPMoviePlayerコントロールのタグです。
movieControlModeプロパティを調べてください。あなたはMPMovieControlModeを設定することができます。
動画再生コントロールを表示するためのMPMovieControlModeオプションます。
typedef enum {
MPMovieControlModeDefault,
MPMovieControlModeVolumeOnly,
MPMovieControlModeHidden
}
MPMovieControlMode;
またMPMoviePlayerScalingModeDidChangeNotificationをチェックアウトすることができます。
の前iOS3.2 の
「disapierance」を検出することは簡単です。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController];
appieranceを検出する(多分もっと良い方法があります)少し難しいです。
...
[moviePlayerController play];
mainTimer = [NSTimer scheduledTimerWithTimeInterval:1/100 target:self selector:@selector(tick) userInfo:nil repeats:YES];
- (void)tick {
if( [[[UIApplication sharedApplication] windows] count] < 2 ) return;
moviePlayerWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
if( moviePlayerWindow ){
[mainTimer invalidate], mainTimer=nil;
// here you have moviePlayerWindow
}
}