2010-04-22 15 views
8

Próbuję uzyskać aplikację na iPhone'a, która wymaga niemal każdego naciśnięcia lub pop w stosie kontrolera Nav, aby zmienić orientację.Wymuszanie zmian UInterfaceOrientation na iPhonie

Zasadniczo pierwszy widok to portret, drugi krajobraz to trzeci portret (Tak, wiem, że to mniej niż idealne, ale taki jest projekt i muszę go zaimplementować).

Byłem przez różne porady na tutaj ....
How do I detect a rotation on the iPhone without the device autorotating?
Force portrait orientation on pushing new view to UINavigationViewController
Is there a documented way to set the iPhone orientation?
Ale bez całkowitego sukcesu.

Ustawianie połączyć przeciwko 3.1.2 moje czytanie artykułów powiązanych powyżej wskazuje na to, że jeśli mój widok portret popycha widok z

 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeRight)); 
} 
Wtedy wtedy widok powinien pojawiają obrócony do góry. Co się dzieje, pojawia się w "złamanej" formie portretu, a następnie obraca się prawidłowo, gdy urządzenie jest obracane.

Jeśli poprowadzę kontroler z powrotem do mojego widoku pionowego (który ma odpowiednią opcję "Automatycznie obracaj"), pozostaje on w widoku zepsutym krajobrazem, dopóki urządzenie nie powróci do orientacji pionowej.

Próbowałem również usunąć wszystkie wiadomości, które powinny zostać uruchomione, i zamiast tego wymusić rotację, zmieniając widok. Tego rodzaju prace, i doszedłem do wniosku, że przesuwając pasek stanu (który jest rzeczywiście ukryty w mojej aplikacji) [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight; klawiatura pojawi się z prawidłową orientacją w razie potrzeby.

Problem z tym podejściem polega na tym, że transformacja paska stanu jest dziwna i brzydka, gdy nie masz paska stanu - z każdą zmianą pojawia się cień na stronie.

So. Czego mi brakuje.

1) Czy nie mam racji sądząc, że w 3.1.2 (lub prawdopodobnie wcześniej) powinienAutorotateToInterfaceOrientation powinien zapewnić pożądaną orientację po prostu naciskając kontrolerów?

2) Czy istnieje inny sposób na uzyskanie klawiatury w prawidłowej orientacji.

3) są nieudokumentowane API wywołuje droga (proszę nie)

Odpowiedz

4

Nie należy stosować [UIViewController shouldAutorotateToInterfaceOrientation:] aby wywołać zmiany orientacji!; jest tam tylko po to, aby system wiedział, czy dozwolone są automatyczne obroty. Powinieneś go zaktualizować, aby określić orientację, która jest dozwolona.

Aby zmienić orientację podczas wyświetlania określonego widoku, należy wywołać [UIApplication setStatusBarOrientation:animated:] w metodzie przesłaniania dla każdego kontrolera widoku wymuszającego określoną orientację. To spowoduje zmianę, gdy widok zostanie przesunięty na stos i gdy zostanie z niego wyskakujący. Upewnij się, że dzwonisz pod numer super w swojej metodzie zastępowania.

Jest to również odpowiednie miejsce do zmiany sposobu wyświetlania paska stanu, jeśli jest to coś, co robisz.

+0

Nie jestem pewien, czy istnieje różnica między [UIApplication setStatusBarOreintation .... a [UIApplication sharedApplication] .statusBarOrientation ... będę testować, w przeciwnym razie to jest to, co zrobiłem, i cierpię z powodu cień obracającego się paska stanu.W widoku poziomym używam transformacji, aby początkowo pokazać widok w krajobrazie. Jeśli następnie zezwolę na widok krajobrazu za pomocą metody ToAutorotateToInterfaceOrientation, czy nie zostanie on ponownie włączony? Jak mogę to zmienić? – Andiih

+0

Należy zauważyć, że ta metoda została już uznana za przestarzałą w systemie iOS 9. – fullofsquirrels