Riproduzione di video in uno schermo di dimensioni personalizzate - visualizza in iPhone
-
07-07-2019 - |
Domanda
Supponiamo che l'utente tocchi un pulsante e la riproduzione del video inizi. Ora, quando il video viene riprodotto, è sempre in modalità a schermo intero.
Il video deve essere riprodotto in modalità verticale (ma normalmente il video viene riprodotto in modalità orizzontale). Come posso farlo?
Soluzione
@interface MPMoviePlayerController (extend)
-(void)setOrientation:(int)orientation animated:(BOOL)value;
@end
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieUR];
[moviePlayer setOrientation:UIDeviceOrientationPortrait animated:NO];
if (moviePlayer)
{
[self.moviePlayer play];
}
Questa soluzione verrà rifiutata da Apple, in quanto setOrientation for movie player è l'API privata. Devi stare attento, ma potrebbe funzionare su iPhone Jailbroke.
Altri suggerimenti
Solo un aggiornamento, l'ultimo iPhone SDK 3.2+ consentirà ora ai programmatori di mostrare il video in qualsiasi dimensione e orientamento desiderati, viene fornito il nuovo MPMoviePlayerView, che è una proprietà di MPMoviePlayerController, questa vista avrà il video, che hai può aggiungere come visualizzazione secondaria alla visualizzazione.
Dai documenti documentati non penso che ciò sia possibile utilizzando il lettore multimediale incorporato
Prova questo. Ho trovato qualcosa di nuovo.
@interface MPMoviePlayerController (extend)
-(void)setOrientation:(int)orientation animated:(BOOL)value;
@end
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieUR];
[moviePlayer setOrientation:UIDeviceOrientationPortrait animated:NO];
if (moviePlayer)
{
[self.moviePlayer play];
}
Ecco cosa ho fatto. Aggiungi NSNotification per avvisarti quando termina il precaricamento del video.
- (void)playVideoUrl:(NSString *)videoUrl {
NSURL *url = [NSURL URLWithString:videoUrl];
MPMoviePlayerController* theMovie=[[MPMoviePlayerController alloc]
initWithContentURL:url];
[[NSNotificationCenter defaultCenter] addObserver:self
//MPMoviePlayerContentPreloadDidFinishNotification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMovieFinishedPreloading:)
name:MPMoviePlayerContentPreloadDidFinishNotification
object:theMovie];
// Movie playback is asynchronous, so this method returns immediately.
[theMovie play];
}
Selettore di richiamata:
-(void)myMovieFinishedPreloading:(NSNotification*)aNotification {
NSArray *windows = [[UIApplication sharedApplication] windows];
UIWindow *moviePlayerWindow = nil;
if ([windows count] > 1)
{
moviePlayerWindow = [[UIApplication sharedApplication] keyWindow];
}
CGAffineTransform transform = CGAffineTransformMakeScale(0.5, 0.5);
transform = CGAffineTransformRotate(transform, -90.0f*M_PI/180.0f);
[moviePlayerWindow setTransform:transform];
}