[aktualizacja]iPhone nie może obrócić film do trybie poziomym za pomocą MPMoviePlayerViewController
Jak zalecono zmieniłem wszystkie kontrolery widoku rodzica do wspierania wszystkich kierunków. Moja struktura aplikacji wygląda następująco: AppDelegate> RootViewController> Wideo> VideoDetails> MPMoviePlayerViewController.
Wideo będzie odtwarzane w poziomie, jeśli zmienię je wszystkie, aby obsługiwały wszystkie orientacje. Ale wspieranie wszystkich orientacji nie jest tym, czego chcę i powoduje inne problemy. Czy jest jakaś inna praca lub cokolwiek innego, co mogę zrobić?
Dzięki
[/ Aktualizacja]
Mam app iPhone portret oparty który wyświetla filmy za pomocą niestandardowego podklasa MPMoviePlayerViewController. Kiedy użytkownik naciśnie grać utworzyć instancję tej klasy i przedstawić go modally następująco:
- (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];
}
Problemem jest to, że gra dobrze w układzie pionowym, ale po włączeniu telefonu iPhone do krajobrazu film nadal odgrywa w układzie pionowym i nie krajobraz :(Wszystkie kontrolery widoku w aplikacji wspierać orientację pionową tylko
My MPMoviePlayerViewController podklasa nadpisuje tylko następującą metodę w celu umożliwienia zmiany orientacji, ale to nie ma wpływu.
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
mam nawet próbował programowo obrócić wideo, ale przy absolutnym braku szczęścia zawsze pozostaje w trybie portretu.
- (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;
}
Wsparcie obrotu jest * rodzaj * heirarchical. Więc jeśli prezentujesz kontroler odtwarzacza filmowego i nie pozwala ci się obracać, moim pierwszym krokiem do debugowania byłoby sprawdzenie KAŻDEGO kontrolera widoku, który prowadzi do twojego odtwarzacza filmowego dla metody 'shouldAutorotate..' i uczynienia go po prostu' return YES; '(możesz zrobić to stopniowo, jeśli chcesz później zaoszczędzić dodatkowych kłopotów).Następnie przełączaj je jeden po drugim z powrotem na portret, aż zablokuje portret, i wiesz, który z nich "UIKit" sprawdza, kiedy próbujesz obrócić swój. Idź stamtąd. – darvids0n
@ darvids0n thanks. Naprawdę nie chcę, aby jakikolwiek inny widok obsługiwał coś innego niż portret, ale myślę, że spróbuję i zobaczę, co się stanie. – bennythemink
@ darvids0n Zaktualizowałem moje pytanie. czy jest coś, co możesz zasugerować? wielkie dzięki za radę. – bennythemink