2014-09-28 32 views
8

Sto eseguendo il porting di un'applicazione su iOS 8. Avevo del codice per riprodurre un video che funzionava prima ma ora non funziona.MPMoviePlayerController problemi di vincolo di layout

quando l'eseguo, ottengo i seguenti errori:

(
"<NSLayoutConstraint:0x7faba2df5940 H:|-(34)-[MPKnockoutButton:0x7faba2e6d750](LTR) (Names: '|':_UIBackdropContentView:0x7faba2dc38c0)>", 

"<NSLayoutConstraint:0x7faba2d51780 H:[MPKnockoutButton:0x7faba2e6d750]-(34)-[MPDetailSlider:0x7faba2dc6440](LTR)>", 

"<NSLayoutConstraint:0x7faba2d5b7f0 H:[MPDetailSlider:0x7faba2dc6440]-(34)-[UIView:0x7faba2dc4060](LTR)>", 

"<NSLayoutConstraint:0x7faba2dc5da0 UIView:0x7faba2dc4060.right == _UIBackdropView:0x7faba2dbfdc0.right>", 

"<NSLayoutConstraint:0x7faba2dc58d0 H:|-(0)-[_UIBackdropView:0x7faba2dbfdc0] (Names: '|':MPVideoPlaybackOverlayView:0x7faba2dbf6a0)>", 

"<NSLayoutConstraint:0x7faba2dc5950 H:[_UIBackdropView:0x7faba2dbfdc0]-(0)-| (Names: '|':MPVideoPlaybackOverlayView:0x7faba2dbf6a0)>", 

"<NSLayoutConstraint:0x7faba2df9b10 H:[MPVideoPlaybackOverlayView:0x7faba2dbf6a0(0)]>", 

"<NSAutoresizingMaskLayoutConstraint:0x7faba2dfbfa0 h=-&- v=-&- _UIBackdropContentView:0x7faba2dc38c0.midX == _UIBackdropView:0x7faba2dbfdc0.midX>", 

"<NSAutoresizingMaskLayoutConstraint:0x7faba2dfbff0 h=-&- v=-&- _UIBackdropContentView:0x7faba2dc38c0.width == _UIBackdropView:0x7faba2dbfdc0.width>" 
) 

Ecco il codice:

movieController = [[MPMoviePlayerController alloc] 
       initWithContentURL:[NSURL URLWithString:playlistUrl]]; 

movieController.movieSourceType = MPMovieSourceTypeStreaming; 
[movieController.view setFrame:[self.playerView bounds]]; 

[self.playerView addSubview:movieController.view]; 
[movieController play]; 

Qualche idea?

risposta

7

Questo sembra essere risolto in iOS 8.1. L'errore è scomparso dopo l'aggiornamento.

Tuttavia, ho dovuto modificare leggermente il mio codice:

movieController = [[MPMoviePlayerController alloc] 
        initWithContentURL:[NSURL URLWithString:playlistUrl]]; 

movieController.movieSourceType = MPMovieSourceTypeStreaming; 

[movieController.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[playerView addSubview:movieController.view]; 

id views = @{ @"player": movieController.view }; 

[playerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[player]|" 
                     options:0 
                     metrics:nil 
                     views:views]]; 

[playerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[player]|" 
                     options:0 
                     metrics:nil 
                     views:views]]; 
[movieController play]; 
+0

Grazie, Simon, questo mi ha fatto risparmiare un sacco di tempo! –

1

Mi sono appena imbattuto in questo problema.

Ho notato che le avvertenze relative ai vincoli comparivano anche senza la vista MKMoviePlayerController sullo schermo e prima di accedervi.

Questo mi ha portato a rimuovere le mie chiamate alle API di generazione di miniature requestThumbnailImagesAtTimes:timeOption: e cancelAllThumbnailImageRequests.

Dopo aver utilizzato un metodo alternativo per recuperare le anteprime, gli avvisi si sono fermati immediatamente.

Sto caricando gli URL locali, ma non lo streaming, ma immagino che il meccanismo di streaming stia tentando di caricare una miniatura da qualche parte e causando i problemi che stiamo vedendo.

Non ho notato alcuna soluzione documentata o risposta a questo problema, quindi spero che le mie prove aneddotiche siano d'aiuto.

1

per i più pigri.

quando voglio usare movieController.view.frame direttamente mi basta chiamare

[movieController.view setTranslatesAutoresizingMaskIntoConstraints:YES]; 

prima

[movieController prepareToPlay]; 
[self.view addSubview:movieController.view]; 

di non pasticciare con i vincoli.

Problemi correlati