2015-06-24 8 views
8

Sto utilizzando AVPLayerViewController per lo streaming di contenuto. La riproduzione funziona bene ma non vedo il pulsante "Fine" per chiudere la visualizzazione.Nessun pulsante "Fine" su AVPlayerViewController

Ecco io come ho messa a punto e mostrare il controller della vista

NSURL* url = [content localSessionUrl]; 
AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init]; 
playerViewController.player = [AVPlayer playerWithURL:url]; 
[self.navigationController pushViewController:playerViewController animated:YES]; 
[self.navigationController setNavigationBarHidden:YES]; 

È perché sto spingendo su una navigationController? enter image description here

+0

come hai gestito questo? fatto pulsante personalizzato fatto? @dev –

+0

@Fyza, invece di pushViewController ho chiamato presentViewController come spiegato da pck456 sotto – dev

+0

Prova questa [soluzione] (http://stackoverflow.com/a/41281453/4593553) funziona per me! – Jerome

risposta

7

Sì, il pulsante "Fine" funge da licenziamento per uno stile di presentazione modale. Se si sta spingendo AVPlayerViewController nello stack di navigazione, sarà necessario gestire personalmente lo scoppio.

19

Invece di premere o aggiungere una vista secondaria, provare a presentare la vista. Il pulsante Fine verrà mostrato automaticamente. Di seguito è riportato lo snippet di codice.

-(void)playVideoWithUrl:(NSURL *)url{ 
    AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc]init]; 
    playerViewController.player = [[AVPlayer alloc]initWithURL:url]; 
    [self presentViewController:playerViewController animated:YES completion:nil]; 
    playerViewController.view.frame = self.view.frame; 
    [playerViewController.player play]; 
} 
+1

Ha funzionato perfettamente ... !! – UnnY

+0

Aggiornamento Swift 3: utilizzare 'self.showDetailViewController' invece di' self.presentViewController' – Florensvb

2

Credo che il problema è quando si aggiunge la vista AVPlayerViewController alla vista sullo schermo che occupa tutto lo schermo, si tratta come già in modalità a schermo intero. Il trucco è di aggiungerlo a una vista che occupa una porzione più piccola dello schermo.

Inizialmente ho fatto questo:

// Setup an AVPlayerViewController 
self.avPlayerViewController = [[AVPlayerViewController alloc] init]; 
if ([self.avPlayerViewController respondsToSelector:@selector(allowsPictureInPicturePlayback)]) { 
    self.avPlayerViewController.allowsPictureInPicturePlayback = NO; 
} 

// Attach the Active Cloack AVPlayer to the AVPlayerViewController 
AVPlayer *player = self.avPlayer; 
self.avPlayerViewController.player = player; 
self.avPlayerViewController.view.frame = self.view.bounds; 
[self.view addSubview:self.avPlayerViewController.view]; 

// Setup the Parent Child relationshipo 
[self addChildViewController:self.avPlayerViewController]; 
[self.avPlayerViewController willMoveToParentViewController:self]; 
[self.avPlayerViewController didMoveToParentViewController:self]; 

Tuttavia, poi ho avuto lo stesso problema che il mio giocatore non ha avuto un pulsante Fine, quindi non ho potuto uscire dal video.

Ho quindi modificato il mio xib/storyboard e ho aggiunto una UINavigationBar in alto con un pulsante done e un UIView come contenitore sotto questo. Ho quindi aggiunto avPlayerViewController a questa vista contenitore e i controlli sono stati trasformati magicamente in una modalità non a schermo intero. Ho ottenuto un pulsante a schermo intero per portare il lettore in modalità a schermo intero.

Tuttavia Poi ho dovuto creare il codice per l'auto nascondere la mia barra di navigazione e aggiungere un pulsante fatto per questo e un titolo ecc ...

0

per iPad che uso UIModalPresentationFormSheet per la presentazione e il tasto fatto wwas manca ... così ho usato il mio pulsante:

Problemi correlati