电影结束时在电影播放器​​中显示控件

时间:2012-10-31 07:26:25

标签: iphone ios video mpmovieplayercontroller movieplayer

我希望在电影结束时显示电影播放器​​控件,所以我将观察者添加到NSNotificationCenter:

- (void)movieFinishedCallback:(NSNotification*)aNotification
{
    // Obtain the reason why the movie playback finished
    NSNumber *finishReason = [[aNotification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];

    if ([finishReason intValue] == 0)
    {
        [self showControls];
    }

   // Handle other reasons 
}


- (void)showControls
{
    for(id views in [[[self.playerVC moviePlayer] view] subviews]){
        for(id subViews in [views subviews]){
            for (id controlView in [subViews subviews]){
                [controlView setAlpha:1.0];
                [controlView setHidden:NO];
            }
        }
    }
}
直到现在,每件事情都运转良好并且出现了控件,但是当我点击屏幕以隐藏它们时,控件消失并再次快速出现(像闪光灯一样),然后我需要再次点击查看以隐藏控件..

有谁知道我为什么会遇到这个问题?还是有另一个想法,在视频结束时显示控件?

1 个答案:

答案 0 :(得分:0)

首先调试并打印MPMoviePlayerView的子视图,然后记下子视图并找到控件视图的名称。

这是我在我的应用程序中进行的调试。

Printing description of subViews:
<MPVideoContainerView: 0x7f936950f6e0; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x7f936950fa30>>
Printing description of controlView:
<MPVideoPlaybackOverlayView: 0x7f9369659a70; frame = (0 0; 375 667); alpha = 0; hidden = YES; autoresize = W+H; tag = 1004; layer = <CALayer: 0x7f93696c4710>>
Printing description of subViews:
<MPVideoContainerView: 0x7f936950f6e0; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x7f936950fa30>>
Printing description of views:
<MPSwipableView: 0x7f9369510290; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x7f9369510d30>; layer = <CALayer: 0x7f9369510620>>

然后我只是检查了控件视图的名称并将其从播放器中删除。将其设置为隐藏。

- (void)hideControls
{
    for(id views in [[player view] subviews]){
        for(id subViews in [views subviews]){
            for (id controlView in [subViews subviews]){
                if ( [controlView isKindOfClass:NSClassFromString(@"MPVideoPlaybackOverlayView")] ) {
                    [controlView setAlpha:0.0];
                    [controlView setHidden:YES];
                }
            }
        }
    }
}