Done button event MPMoviePlayerController

前端 未结 7 747
闹比i
闹比i 2020-12-06 09:20

On my iPhone i\'m playing video/audio files in fullscreen mode. When the video/audio file reached its end then the following method is triggered:

- (void) mo         


        
相关标签:
7条回答
  • 2020-12-06 09:37
    @property (nonatomic, strong) MPMoviePlayerController *moviePlayer;
    
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(doneButtonClick:) 
                                                 name:MPMoviePlayerDidExitFullscreenNotification 
                                               object:nil];
    
    - (void)doneButtonClick:(NSNotification*)aNotification
    {
        if (self.moviePlayer.playbackState == MPMoviePlaybackStatePaused)
        {
            NSLog(@"done button tapped");
        }
        else
        {
            NSLog(@"minimize tapped");
        }
    }
    
    0 讨论(0)
  • 2020-12-06 09:39

    check for a enum inside notification userInfo dictionary

    NSNumber *reason = [notification.userInfo objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
    
    if ([reason intValue] == MPMovieFinishReasonUserExited) {
    
       // done button clicked!
    
    }
    

    Selected answer has since integrated my response. Please refer above.

    0 讨论(0)
  • 2020-12-06 09:40

    Apple's documentation is very poor on this matter. It suggests to listen for MPMoviePlayerDidExitFullscreenNotification (or WillExit...) and NOT for MPMoviePlayerDidFinishNotification as it doesn't fire when the user taps Done. This is entirely not true! I've just tested it on Xcode 6.0 with iPad Simulator (iOS 7.1 + 8.0) and only MPMoviePlayerDidFinishNotification is fired when DONE is tapped.

    My compliments to user523234 who got it right on one of the comments above.

    Register the following observer

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playbackStateChanged:)
                                            name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:_mpc];
    
    0 讨论(0)
  • 2020-12-06 09:45

    SUCCESSFULLY TESTED IN iOS7 AND iOS8

    Check and remove earlier notification observer if any for MPMoviePlayerPlaybackDidFinishNotification.

    - (void)playVideo:(NSString*)filePath
    {
         // Pass your file path
            NSURL *vedioURL =[NSURL fileURLWithPath:filePath];
            MPMoviePlayerViewController *playerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:vedioURL];
    
        // Remove the movie player view controller from the "playback did finish" notification observers
        [[NSNotificationCenter defaultCenter] removeObserver:self
                                                        name:MPMoviePlayerPlaybackDidFinishNotification
                                                      object:playerVC.moviePlayer];
    
        // Register this class as an observer instead
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(movieFinishedCallback:)
                                                     name:MPMoviePlayerPlaybackDidFinishNotification
                                                   object:playerVC.moviePlayer];
    
        // Set the modal transition style of your choice
        playerVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    
        // Present the movie player view controller
        [self presentViewController:playerVC animated:YES completion:nil];
    
        // Start playback
        [playerVC.moviePlayer prepareToPlay];
        [playerVC.moviePlayer play];
    }
    

    Dismiss controller

    - (void)movieFinishedCallback:(NSNotification*)aNotification
    {
        // Obtain the reason why the movie playback finished
        NSNumber *finishReason = [[aNotification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
    
        // Dismiss the view controller ONLY when the reason is not "playback ended"
        if ([finishReason intValue] != MPMovieFinishReasonPlaybackEnded)
        {
            MPMoviePlayerController *moviePlayer = [aNotification object];
    
            // Remove this class from the observers
            [[NSNotificationCenter defaultCenter] removeObserver:self
                                                            name:MPMoviePlayerPlaybackDidFinishNotification
                                                          object:moviePlayer];
    
            // Dismiss the view controller
            [self dismissViewControllerAnimated:YES completion:nil];
        }
    }
    

    You'r Done !!!

    0 讨论(0)
  • 2020-12-06 09:56

    Wow, so many wrong approaches. The answer is this simple:

        moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:filePath]];
    
        [self.navigationController presentMoviePlayerViewControllerAnimated:moviePlayerViewController];
    

    Check this link if you have a minute: https://developer.apple.com/library/prerelease/ios/documentation/MediaPlayer/Reference/UIViewController_MediaPlayer_Additions/index.html

    Happy coding! Z.

    0 讨论(0)
  • 2020-12-06 10:02

    It worked for me on iPad when I listen to MPMoviePlayerWillExitFullscreenNotification.

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(doneButtonClick:) 
                                                 name:MPMoviePlayerWillExitFullscreenNotification 
                                               object:nil];
    

    And selector method:

    -(void)doneButtonClick:(NSNotification*)aNotification{
        NSNumber *reason = [notification.userInfo objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
    
        if ([reason intValue] == MPMovieFinishReasonUserExited) {
            // Your done button action here
        }
    }
    
    0 讨论(0)
提交回复
热议问题