Domanda

Ho un layout di flusso orizzontale per la mia UicollectionVisualizza.Ogni cella occupa l'intero schermo e il paging è acceso.Ogni cella contiene anche un mpmovieplayercontroller e sono in grado di riprodurre video senza problemi.Tuttavia, se scorlo a sinistra oa destra, il film attualmente visualizzato (che è in pausa a questo punto) scompare - la vista del giocatore diventa nero.Se poi attivo la riproduzione, il video appare di nuovo.Ho provato aggiunto premiPlay nei metodi Delegate di ScrollView per mantenere in qualche modo il video visibile, ma senza successo.

È stato utile?

Soluzione

È possibile utilizzare solo un'istanza di MPMoviePlayerController contemporaneamente.Questa è una limitazione con MPMoviePlayerController.

Nel tuo caso, quando si avvia per scorrere, almeno due generacodicitagCode devono essere inizializzati e cercare di riprodurre un video.Questo non è possibile con MPMoviePlayerController.

Se si desidera riprodurre più di un video subito nella stessa schermata, potresti prendere in considerazione l'utilizzo di MPMoviePlayerController per questo.E ci sono lettori video open source basati su AVFoundation.Usine uno di loro sarà più facile che creare un giocatore AVFoundation da zero.

Altri suggerimenti

Quando si scorre la visualizzazione della raccolta, le celle che escono dalla vista vengono riutilizzate dal meccanismo di raccolta vista "Piscine riutilizzabili", quindi il lettore filmato esistente viene rimosso e il suo stato viene ripristinato. Quando la vista della cella è visibile di nuovo, una vista viene presa dal pool (o creato una nuova se il pool è vuoto) e devi riconfigurarlo. Cosa puoi fare in tale situazione:

    .
  • Soluzione semplice: fornire ogni singola collezione Guarda la cella di visualizzazione di un identificatore univoco (ad esempio utilizzando le coordinate del percorso dell'indice delle celle), quindi non è riciclata. Ritrada indietro di questo approccio: se hai molte celle, potresti avere problemi di memoria poiché ogni singola nuova cella viene ricreato da zero; E il controller del lettore cinematografica prende memoria non trascurabile
  • Soluzione più complicata: prendere traccia di ogni singolo stato di lettore cinematografica (tempo di riproduzione, video URL, ... Puoi farlo osservando i suoi parametri o ascoltando le sue notifiche) su un dizionario, di nuovo indicizzato dal percorso dell'indice delle cellule . Quando la cella uscirà dalla vista, il lettore cinematografica viene resettato, ma quando è ri-ciclista puoi riconfigurare lo stato del lettore filmato nella posizione giusta. Ovviamente l'operazione non è immediata (il lettore cinematografica richiede il tempo per iniziare a rendering del video) ma non aggiungi una pressione di memoria aggiuntiva alla tua app.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top