Frage

Ich habe eine einfache Ansicht, die eine MPMoviePlayerViewController erstellt, wenn der Benutzer eine Taste drückt, mit der presentMoviePlayerViewControllerAnimated: Methode. Die neuen View-Controller-Folien und zeigt den Film-Player, so weit so gut.

Wenn jedoch die Taste gedrückt wird, werden die aktuellen View-Controller gleitet aus dem Boden, ein hässlich (wahrscheinlich Standard) weiß Ansicht, die zeigt, dass die Stöcke um überall von einer halben Sekunde auf wenige Sekunden, bis der Film-View-Controller angezeigt . Es scheint, wie es auf meiner Netzwerkverbindung abhängig ist, als ob der Film-View-Controller wird Teile des Films herunterzuladen, bevor den Spieler zeigt.

Bin ich etwas falsch zu machen, oder wie kann ich arbeiten, das um? Ich würde wirklich lieber nur direkt die Film-View-Controller zeigen, vielleicht sogar ohne die vorherige Ansicht Controller herausgleitet, dass die Play-Taste hält, aber immer noch wie ein modal View-Controller animierte.

Danke!

Christoph

War es hilfreich?

Lösung 2

ich am Ende nur den Hintergrund der zu schwarz Ansicht einstellen. Nicht um die Verzögerung zu beheben, sondern macht es sieht viel schöner:

  theMovieVC.view.backgroundColor = [UIColor blackColor];

Andere Tipps

Die Lösung war die Spieler-View-Controller init, wenn die übergeordnete Ansicht erstellt wird, und dann prepareToPlay auf den moviePlayer innen nennen. Das entfernt die Latenzzeit, wenn die Play-Taste gedrückt, und (ich glaube) bewegt es, wenn der Benutzer bekommt auf die übergeordnete Ansicht, aus der er den Film abspielen kann.

EDIT: Dadurch wird die Verzögerung, aber aus irgendeinem Grund, den Film auch View-Controller-Initialisierung autoplays es, wenn es geladen wird, so dass das keine gute Lösung.

das ist, was ich für iOS> 3.2:

- (void) play {
    mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mMovieURL];

    if ([mMoviePlayer respondsToSelector:@selector(loadState)]) 
    {
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(moviePreloadDidFinishIOS32:) 
                                                     name:MPMoviePlayerContentPreloadDidFinishNotification 
                                                   object:nil];


        [mMoviePlayer prepareToPlay];
        [mMoviePlayer play];
        mMoviePlayer.controlStyle = MPMovieControlStyleEmbedded;
        [mMoviePlayer setMovieControlMode:MPMovieControlModeDefault];
        [mMoviePlayer setBackgroundColor:[UIColor clearColor]];
    }
}

und

- (void) moviePreloadDidFinishIOS32:(NSNotification*)notification;
{
    // Remove observer
    [[NSNotificationCenter  defaultCenter] 
     removeObserver:self
     name:MPMoviePlayerContentPreloadDidFinishNotification
     object:nil];

    self.view = mMoviePlayer.view;
}

So ist in der viewDidLoad können Sie instanziiert, was Sie wollen (UIActivityIndicatorView zum Beispiel). Der View-Controller wird nur dann ersetzt werden, wenn die Vorspannung beendet ist.

ich bemerken das gleiche Problem in meiner Anwendung. Wer noch Anregungen, dieses Problem zu vermeiden?

In meinem Fall, ich bin Drücken des MPMoviePlayerViewController auf die Benutzeroberfläche als modalen Popup.

// build the movie player
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
MPMoviePlayerViewController *movieViewController = [[[MPMoviePlayerViewController alloc] initWithContentURL:request.URL] autorelease];
[movieViewController.moviePlayer prepareToPlay];
movieViewController.view.backgroundColor = [UIColor blackColor];

// show the movie player view
[self.parentViewController presentModalViewController:movieViewController animated:YES];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top