Я пытаюсь добавить пользовательские кнопки слева и справа от стандартных элементов управления перемоткой/воспроизведением/вперед в представлении MPMoviePlayerController (OS 2.x и выше). Я разобрался, как добавить их в окно плеера, но они всегда видны. Есть ли способ определить, когда стандартные элементы управления появляются и исчезают?
Как определить, когда элементы управления iPhone MPMoviePlayer появляются/исчезают?
Ответы (4)
Ок, понял, сделай так:
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
обнаружить "отчаяние" легко:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController];
обнаружить появление немного сложнее (может быть, есть лучший способ):
...
[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
}
}