不应该调用MPMoviePlayerPlaybackDidFinishNotification

sol*_*sol 5 iphone mpmovieplayercontroller ipad

根据Apple的MPMoviePlayerController doc:

MPMoviePlayerPlaybackDidFinishNotification - 如果电影播放器​​以全屏模式显示并且用户点击完成按钮,则不会发送此通知.

在我看来,这是错误的.使用下面的代码,当我点击完成按钮时,会调用pl​​ayerPlaybackDidFinish.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerPlaybackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.player];

- (void) playerPlaybackDidFinish:(NSNotification*)notification
{
    NSLog(@"WHY?");
    self.player.fullscreen = NO;
}
Run Code Online (Sandbox Code Playgroud)

我需要区分用户点击完成按钮和电影完成整个播放.当电影结束时,playerPlaybackDidFinish会被调用,但就像我说的那样,当你点击Done时它也会被调用.

Gho*_*stM 22

以下是检查MPMoviePlayerPlaybackDidFinishReasonUserInfoKey的方法,这是MPMoviePlayerPlaybackDidFinishNotification通知的一部分

- (void) playbackDidFinish:(NSNotification*)notification {
    int reason = [[[notification userInfo] valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue];
    if (reason == MPMovieFinishReasonPlaybackEnded) {
        //movie finished playin
    }else if (reason == MPMovieFinishReasonUserExited) {
        //user hit the done button
    }else if (reason == MPMovieFinishReasonPlaybackError) {
        //error
    }
}
Run Code Online (Sandbox Code Playgroud)


Nev*_*vin 2

当您收到通知时,您可以检查播放器的 endPlaybackTime。如果是-1,那么电影就自然结束了。

对于流媒体内容,您可以检查 MPMoviePlayerPlaybackDidFinishNotification 上 userInfo 内的 MPMoviePlayerPlaybackDidFinishReasonUserInfoKey。

如果它等于 MPMovieFinishReasonUserExited 则表示用户停止播放内容。

  • 这似乎是个好主意,但 if ([[[notification userInfo] objectForKey:@"MPMoviePlayerPlaybackDidFinishReasonUserInfoKey"] intValue] == MPMovieFinishReasonUserExited) 始终返回 false,无论我单击“完成”还是用户自然结束。 (2认同)