MPMoviePlayerController не работает в iOS4 - PullRequest
1 голос
/ 14 июля 2010

Я использую первый ответ от iOS 4 + MPMoviePlayerController

, чтобы попытаться заставить MPMoviePlayerController играть. В симуляторе (устройство iPhone с iOS4) слышен звук, но нет видео. На устройстве (iPhone 3GS и iOS4) я ничего не получаю. Вот мой код:

    MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:moviePath]];
    moviePlayer.movieControlMode = MPMovieControlModeDefault;

    if ([moviePlayer respondsToSelector:@selector(view)]) {
        moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
        [moviePlayer.view setFrame:self.view.bounds];
        [self.view addSubview:moviePlayer.view];
    }

    [moviePlayer play];

Есть идеи, что я делаю не так?

Ответы [ 2 ]

9 голосов
/ 15 июля 2010

Я только что протестировал следующий код на iOS4 + iPhone 4 (и 3GS) - он работает нормально.На первый взгляд, я думаю проблема вашего кода не в том, чтобы вызывать setFullscreen:animated на вашем MPMoviePlayerController экземпляре.

- (void)willEnterFullscreen:(NSNotification*)notification {
    NSLog(@"willEnterFullscreen");
}

- (void)enteredFullscreen:(NSNotification*)notification {
    NSLog(@"enteredFullscreen");
}

- (void)willExitFullscreen:(NSNotification*)notification {
    NSLog(@"willExitFullscreen");
}

- (void)exitedFullscreen:(NSNotification*)notification {
    NSLog(@"exitedFullscreen");
    [self.movieController.view removeFromSuperview];
    self.movieController = nil;
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)playbackFinished:(NSNotification*)notification {
    NSNumber* reason = [[notification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
    switch ([reason intValue]) {
        case MPMovieFinishReasonPlaybackEnded:
            NSLog(@"playbackFinished. Reason: Playback Ended");         
            break;
        case MPMovieFinishReasonPlaybackError:
            NSLog(@"playbackFinished. Reason: Playback Error");
            break;
            case MPMovieFinishReasonUserExited:
            NSLog(@"playbackFinished. Reason: User Exited");
            break;
        default:
            break;
    }
    [self.movieController setFullscreen:NO animated:YES];
}

- (void)showMovie {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterFullscreen:) name:MPMoviePlayerWillEnterFullscreenNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willExitFullscreen:) name:MPMoviePlayerWillExitFullscreenNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enteredFullscreen:) name:MPMoviePlayerDidEnterFullscreenNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(exitedFullscreen:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

    NSURL* movieURL =  [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"tron" ofType:@"mov"]];
    self.movieController = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
    if ([self.movieController respondsToSelector:@selector(view)]) {
        self.movieController.view.frame = self.view.frame;
        [self.view addSubview:movieController.view];
        [self.movieController setFullscreen:YES animated:YES];
    }
    [self.movieController play];
}

// This method is set as the action for an on-screen button
- (void)movieTime:(id)sender {
    [self showMovie];
}
0 голосов
/ 14 июля 2010

For MPMoviePlayerController view - это свойство, а не метод, поэтому вы не можете использовать respondsToSelector: для него, если у него нет методов, синтезированных или написанных для него (т.е. объявлено @dynamic).Что я считаю верным для большинства свойств readonly в UIKit.

...