3

我想在电影完成后显示电影播放器​​控件,所以我将观察者添加到 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];
            }
        }
    }
}

到目前为止,一切都运行良好并且控件出现了,但是当我点击屏幕以隐藏它们时,控件消失并再次快速出现(类似于闪光灯),然后我需要再次点击视图以隐藏控制..

有人知道我为什么会遇到这个问题吗?或者有另一个想法在视频完成时显示控件?

4

1 回答 1

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];
                }
            }
        }
    }
}

于 2015-10-02T04:18:56.757 回答