2010-06-04 22 views
2

Lors de la première création d'un MPMoviePlayerController (par exemple, theMovie), son paramètre initialPlaybackTime peut être défini avec succès. Mais quand theMoive est libéré et recréer un nouveau MPMoviePlayerController, son intialPlaybackTime ne peut pas être défini correctement, en réalité le film est toujours lu dès le début. Le code est comme suit.Impossible de définir le paramètre initialPlaybackTime pour un MPMoviePlayerController lors de sa recréation la deuxième fois

-(void)initAndPlayMovie:(NSURL *)movieURL 
{ 

    MPMoviePlayerController *theMovie = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; 

    // create a notification for moviePlaybackFinish 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie]; 

    theMovie.initialPlaybackTime = 15; 
    [theMovie setScalingMode:MPMovieScalingModeAspectFill]; 
    [theMovie play];} 
-(void) moviePlayBackDidFinish:(NSNotification*)notification 
{ 
    MPMoviePlayerController * theMovie = [notification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie]; 
    [theMovie release]; 
    [self initAndPlayMovie:[self getMovieURL]]; 
} 

Avec le code ci-dessus, lorsque le viewcontroller a la charge et exécuter initAndPlayMovie, le film commence à jouer à partir de 15 secondes, mais quand il joue fini ou « Terminé » est poussé, une nouvelle themovie est créée et commence à jouer à partir de 0 seconde. Quelqu'un sait-il ce qui s'est passé avec la propriété initialPlaybackTime de MPMoviePlayerController?

Et chaque fois que vous rechargez le viewController à l'endroit où se trouve le code ci-dessus (presentModalViewController depuis un viewcontroller parent), le film peut démarrer à partir de n'importe quelle heure de lecture. Je suis vraiment confus quelle est la différence entre les méthodes d'enregistrement MPMoviePlayerController entre la charge de viewcontroller et la recréation après la libération.

+0

[Votre question a été répondue ici] (http://stackoverflow.com/questions/1548492/why-is-it-not-possible-to-use-the-mpmovieplayercontroller-more-than -une fois) – Berik

Répondre

1

Le problème a été résolu! Il faut une étape pour définir correctement le paramètre initialPlaybackTime. Après la libération du lecteur de film, un délai de 1 seconde est nécessaire avant de recommencer la lecture. Assurez-vous que le lecteur de film est complètement libéré.

Il m'a fallu 3 jours pour comprendre le problème. Mais maintenant, ma question est de savoir comment je peux détecter si un cinéaste a été publié complètement plutôt que d'attendre une seconde.

+2

Pourriez-vous expliquer ce que vous entendez par "complet" et en quoi est-il différent de "[player release], player = nil;"? –

1

Après avoir sorti votre themovie, donnez-lui une valeur nulle

[theMovie released]; theMovie = nil;

alors vous pouvez dire si elle a publié déjà.

if (theMovie == nil){
//do something here when movie player is released already
}