2010-10-18 15 views
24

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

+0

Czy znalazłeś rozwiązanie? Jestem w tej samej sytuacji i nie mogę znaleźć rozwiązania. – klefevre

+0

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

Odpowiedz

2

Można użyć osobnego kontrolera widoku za MPMovieplayer. Nie trzeba przesłonić

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

w oryginalnym kontrolerze widoku.

jeśli używasz MPMoviePlayerViewController, wszystko jest już ustawione dla Ciebie, ponieważ metoda shouldAutorotateToInterfaceOrientation: zwróci wartość TAK domyślnie. Można go używać jako podrzędny lub przedstawić go modally wywołując
presentMoviePlayerViewControllerAnimated:

Powiązane problemy