8

[update]iPhone non può ruotare film alla modalità orizzontale utilizzando MPMoviePlayerViewController

Come c'è stato consigliato ho cambiato tutti i controller di vista padre per sostenere tutti gli orientamenti. La mia struttura dell'app è la seguente: AppDelegate> RootViewController> Video> VideoDetails> MPMoviePlayerViewController.

Il video verrà riprodotto in orizzontale se cambio tutti questi per supportare tutti gli orientamenti. Ma sostenere tutti gli orientamenti non è quello che voglio e causa altri problemi. C'è qualche altro lavoro in giro o qualsiasi altra cosa che posso fare?

Grazie

[/ update]

Ho un app iPhone ritratto base che consente di visualizzare i video utilizzando una sottoclasse personalizzata di MPMoviePlayerViewController. Quando l'utente preme giocano creo un'istanza di questa classe e la presentano modale come segue:

- (IBAction) playPressed:(id)sender { 

NSString *filepath = [[NSBundle mainBundle] pathForResource:self.currentVideoModel.videoFileName ofType:@"m4v"]; 
NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 

// MovieViewController is just a simple subclass of MPMoviePlayerViewController 
self.moviePlayerController = [[MovieViewController alloc] initWithContentURL:fileURL]; 

// full screen code. 
[self.moviePlayerController.moviePlayer setScalingMode:MPMovieScalingModeFill]; 
[self.moviePlayerController.moviePlayer setFullscreen:TRUE]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayerController]; 

[self presentMoviePlayerViewControllerAnimated:self.moviePlayerController]; 
} 

Il problema è che si gioca bene in verticale, ma quando accendo l'iPhone in orizzontale la riproduzione del video ancora in verticale e non paesaggio :(Tutti i controller di vista in app supportano solo orientamento verticale

mio MPMoviePlayerViewController sottoclasse sovrascrive solo il seguente metodo per consentire cambiamenti di orientamento, ma non ha alcun effetto:.

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
return (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

ho ancheprovato a ruotare il video a livello di programmazione ma, senza fortuna, rimane sempre in modalità verticale.

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 

if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
    [self.view setTransform:CGAffineTransformMakeRotation(M_PI/2)]; 
    return true; 
} 
else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) { 
    [self.view setTransform:CGAffineTransformMakeRotation(M_PI * 2)]; 
    return true; 
} 
else if (toInterfaceOrientation == UIInterfaceOrientationPortrait) { 
    [self.view setTransform:CGAffineTransformIdentity]; 
    return true; 
} 
else return false; 

}

+0

Il supporto per la rotazione è * un po '* di tipo gerarchico. Quindi, se stai presentando un controller di un lettore di film e non ti permette di ruotare, il mio primo passo di debug sarebbe controllare OGNI controller di visualizzazione che porta al tuo lettore di film per il metodo 'shouldAutorotate..' e renderlo semplicemente' return YES; '(puoi farlo in modo incrementale se vuoi risparmiare ulteriore fastidio in seguito).Quindi, cambiali uno alla volta in verticale finché non si blocca in verticale, e sai quali "UIKit" sta controllando quando cerchi di ruotare il tuo. Vai da lì. – darvids0n

+0

@ darvids0n grazie. Non voglio davvero che nessun'altra vista supporti qualcosa di diverso dal ritratto, ma immagino che farò un tentativo per vedere cosa succede. – bennythemink

+0

@ darvids0n Ho aggiornato la mia domanda. c'è qualcosa che puoi suggerire? molte grazie per qualsiasi consiglio. – bennythemink

risposta

10

[EDIT] La soluzione qui di seguito ha funzionato perfettamente su iOS5, ma non funziona più su iOS6. Potrei avere un po 'di tempo per esaminare questo problema in futuro, si spera :([/ EDIT]

OK Ho risolto il problema, è stato tutto a che fare con la mia incomprensione su come iOS notifica un'app di cambiamenti di orientamento. pensato che trasmetta qualsiasi cambiamento di orientamento, ma non lo fa, segue la tua gerarchia di visualizzazione e spetta a te dire a tutti i controllori di vista di un cambiamento di orientamento.Questo è stato il mio annullamento

La mia app consisteva nel seguente configurare:

finestra> RootViewController> Controller TabBar> Controller nav> View Controller> MPMoviePlayerViewController

I ha suddiviso in gruppi il controller Tabbar per restituire true solo per la modalità verticale. Ho restituito questo dal metodo shouldAutoRotateToOrientation dei controller della vista radice. Ciò ha garantito che tutte le visualizzazioni fossero solo verticali.

Quindi ho presentato il film modally utilizzando il metodo presentMoviePlayerViewControllerAnimated chiamato da RootViewController. Questo metodo ha chiamato automaticamente il metodo personalizzato MPMoviePlayerViewController shouldAutoRotateToOrientation impostato su SÌ per orizzontale e verticale :)

Problemi correlati