Domanda

Ho una semplice opinione che crea un MPMoviePlayerViewController quando l'utente preme un tasto, utilizzando il presentMoviePlayerViewControllerAnimated: metodo. Le nuove diapositive View Controller in e spettacoli del giocatore di film, finora tutto bene.

Tuttavia, quando il pulsante viene premuto, la corrente scorre View Controller fuori la parte inferiore, che mostra un brutto (probabilmente di default) vista bianco, che si attacca in giro ovunque da mezzo secondo a pochi secondi, fino a visualizzare il controller della vista filmato . Sembra come se fosse dipendente da mia connessione di rete, come se il controller della vista filmato sta scaricando parti del film prima di mostrare il giocatore.

sto facendo qualcosa di sbagliato, o come posso risolvere questo? Mi piacerebbe davvero preferisco mostrare solo il controller della vista filmato direttamente, magari anche senza scivolare fuori il precedente controller della vista che contiene il pulsante di riproduzione, ma ancora animato come un controller di vista modale.

Grazie!

Christoph

È stato utile?

Soluzione 2

Ho finito appena impostando lo sfondo della vista al nero. Non fissare il ritardo, ma lo fa apparire molto più bello:

  theMovieVC.view.backgroundColor = [UIColor blackColor];

Altri suggerimenti

La soluzione era quella di init il controller della vista giocatore quando viene creata la vista padre, e quindi chiamare prepareToPlay sul moviePlayer al suo interno. Che rimuove la latenza quando il tasto play viene premuto e (immagino) lo sposta quando l'utente arriva a vista primaria da cui può riprodurre il filmato.

EDIT: Ciò elimina il ritardo, ma per qualche ragione, l'inizializzazione del controller della vista filmato riprodotto automaticamente anche quando è caricato, in modo che non è una buona soluzione.

Questo è quello che faccio per 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]];
    }
}

e

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

    self.view = mMoviePlayer.view;
}

Così, nel viewDidLoad è possibile creare un'istanza ciò che si vuole (UIActivityIndicatorView per esempio). Il controllore vista verrà sostituito solo quando il precarico è terminato.

sto notando lo stesso problema nella mia app. Qualcuno ha suggerimenti per evitare questo problema?

Nel mio caso, sto spingendo il MPMoviePlayerViewController per l'interfaccia utente come un popup modale.

// 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];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top