Od czasu iOS 3.2 klasa MPMoviePlayerController umożliwia osadzenie filmu w hierarchii widoku. Teraz mam do czynienia z tym problemem: tworzę widok portretu, umieszczając instancję MPMoviePlayerController. Kiedy użytkownik dotknie przycisku "pełny ekran", widok ten wchodzi w tryb pełnoekranowy, ale widok pozostaje portretowy. Gdy użytkownik obraca urządzenie, widok filmu pełnoekranowego nie jest automatycznie obracany, ponieważ moja aplikacja nie pozwala orientować się w orientacji krajobrazu. Aby umożliwić automatyczne obracanie widoku pełnoekranowego odtwarzacza filmowego, zmienił się kontroler widoku powinienAutorotateToInterfaceOrientation: metoda zwracania TAK dla krajobrazu, jeśli - i tylko jeśli - odtwarzacz filmów jest w trybie pełnoekranowym. To działa idealnie: gdy użytkownik wejdzie na pełnym ekranie, a następnie obróci się w kierunku poziomym, odtwarzacz automatycznie obróci się w krajobraz i wypełni cały ekran.MPMoviePlayerController ponownie orientuje portret na poziomy i na powrót na portret (iOS 4.1)
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
//return (interfaceOrientation == UIInterfaceOrientationPortrait);
if(UIInterfaceOrientationIsPortrait(interfaceOrientation)) {
return(YES);
}
if(UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
return([movieController isFullscreen]);
}
return(NO);
}
Problem pojawia się, gdy dotknę przycisku "Gotowe" w widoku pełnoekranowym, pozostając w poziomie. Pełny ekran zamyka się, a następnie widzę, że mój oryginalny widok jest autorotowany, ale nie chcę tego automatycznego obracania.
Częściowa, ale nie do przyjęcia rozwiązaniem jest, aby słuchać „MPMoviePlayerDidExitFullscreenNotification” i, jeśli interfejs jest obracany do krajobrazu, siła reorientacji do korzystania z nieudokumentowane i prywatną funkcję:
[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait]
to działa ale nie można tego zaakceptować, ponieważ korzystanie z tej metody jest zabronione.
Próbowałem wymusić orientację przy użyciu [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
, ale jak jestem w pasku kart, to nie działa (UITabBar pozostaje wielkości krajobrazu).
Dzięki za pomoc
Czy znalazłeś rozwiązanie? Jestem w tej samej sytuacji i nie mogę znaleźć rozwiązania. – klefevre
Teoretycznie z nowym sposobem wprowadzonym w iOS6 w celu zarządzania orientacją, ten problem można rozwiązać, ustawiając bezpośrednio orientację każdego kontrolera widoku. Można to zrobić za pomocą nowych metod, które proszą do każdego kontrolera widoku o uprawnienia orientacyjne. – viggio24