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 に答える