Proszę zauważyć, że to pytanie pochodzi z 2008 roku i teraz ma jedynie znaczenie historyczne.
Jaki jest najlepszy sposób tworzenia aplikacji na iPhone'a, która od samego początku działa w trybie poziomym, niezależnie od pozycji urządzenia?
Zarówno programowo, jak i przy użyciu Interface Builder.
ios
objective-c
landscape
Michiel de Mare
źródło
źródło
Odpowiedzi:
Tylko odpowiedź historyczna. Spektakularnie nieaktualne.
Należy pamiętać, że ta odpowiedź jest teraz bardzo nieaktualna /
Ta odpowiedź to tylko ciekawostka historyczna .
Ekscytujące wiadomości! Jak odkrył poniżej Andrew, problem ten został rozwiązany przez firmę Apple w wersji 4.0+.
Wydawałoby się, że nie ma już potrzeby wymuszania rozmiaru widoku na każdym widoku, a konkretny poważny problem krajobrazu „działającego tylko za pierwszym razem” został rozwiązany.
Od kwietnia 2011 roku nie można przetestować ani nawet zbudować niczego poniżej 4.0, więc pytanie jest czysto historyczną ciekawostką. To niesamowite, ile kłopotów sprawiało to programistom przez tak długi czas!
Oto oryginalna dyskusja i rozwiązanie. Teraz jest to zupełnie nieistotne, ponieważ te systemy nie działają nawet.
Wykonanie tej funkcji w pełni jest BARDZO TRUDNE - występują co najmniej trzy problemy / błędy w grze.
spróbuj tego .. projektowanie krajobrazu kreatora interfejsów
Zwróć uwagę w szczególności, że tam, gdzie jest napisane „i musisz wszędzie prawidłowo używać shouldAutorotateToInterfaceOrientation” , oznacza to wszędzie, wszystkie Twoje widoki pełnoekranowe.
Mam nadzieję, że pomoże to w tym koszmarze!
Ważne przypomnienie o DODATKOWYM dobrze znanym problemie: jeśli próbujesz przełączać się między WIĘCEJ NIŻ JEDNYM widokiem (cały krajobraz), PO PROSTU NIE DZIAŁA . Należy o tym pamiętać, bo inaczej stracisz dni na problem. To dosłownie NIE MOŻLIWE. Jest to największy otwarty, znany błąd na platformie iOS. Dosłownie nie ma sposobu, aby sprzęt wykonał drugi ładowany widok, czyli krajobraz. Irytującym, ale prostym obejściem jest to, co musisz zrobić, to mieć trywialnego mistrza UIViewController, który nic nie robi, ale siedzi tam i pozwala przełączać się między widokami.
Innymi słowy, w iOS z powodu poważnego znanego błędu:
Możesz to zrobić tylko raz . Później, jeśli spróbujesz usunąć happyThing.view i zamiast tego wstawisz tam newThing.view, TO NIE DZIAŁA - I TO TAKIE. Maszyna nigdy nie obróci widoku do poziomu. Nie ma żadnej sztuczki, nawet Apple nie może tego zrobić. Obejście, które musisz zastosować, polega na posiadaniu ogólnego kontrolera UIViewController, który po prostu siedzi tam i po prostu przechowuje różne widoki (happyThing, newThing itp.). Mam nadzieję, że to pomoże!
źródło
Z witryny Apple Dev:
źródło
Podsumowanie i integracja ze wszystkich postów, po samodzielnym przetestowaniu; sprawdź aktualizację 4.x, 5.x poniżej.
Od wersji 3.2 nie można zmienić orientacji uruchomionej aplikacji z kodu.
Możesz jednak uruchomić aplikację ze stałą orientacją, chociaż nie jest to proste.
Spróbuj z tym przepisem:
UISupportedInterfaceOrientations
wInfo.plist
plikushouldAutorotateToInterfaceOrientation:
metodę (oczywiście aby zwrócić tę samą wartość, którą zdefiniowałeś w pliku plist)we wszystkich kontrolerach widoku ustawia widok tła za pomocą
self.view.frame = CGRectMake(0, 0, 480, 320)
w
viewDidLoad
metodzie.Aktualizacja (iOS 4.x, 5.x) : Podręcznik programowania aplikacji Apple iOS zawiera akapit „Uruchamianie w trybie poziomym” w rozdziale „Zaawansowane sztuczki z aplikacjami”.
Bibliografia:
źródło
Najpierw ustawiłem w info.plist
następnie umieściłem ten kod w applicationDidFinishLaunching:
W ten sposób mogę pracować nad widokiem w Interface Builder w trybie poziomym.
źródło
Odpowiedź sasba i michaelpryora wydaje się być poprawna, ale jeśli to nie działa, wypróbuj tę alternatywę:
Albo ten:
Albo ten:
Być może będziesz musiał
window makeKeyAndVisible;
najpierw zadzwonić .Kilka linków: Programowanie w trybie poziomym , iPhone SDK: Jak wymusić tylko tryb poziomy?
@Robert: zobacz iPhone SDK, NDA i Stack Overflow .
źródło
Dziwię się, że nikt jeszcze nie wymyślił takiej odpowiedzi:
We wszystkich moich testach, gdy odrzucanie modalnego kontrolera widoku, preferowana orientacja kontrolera widoku nadrzędnego ustawiona w
shouldAutorotateToInterfaceOrientation
jest honorowana, nawet jeśli jest częścią UINavigationController. Więc rozwiązanie tego jest proste:Utwórz fikcyjny UIViewController z UIImageView dla tła. Ustaw obraz na default.png, którego aplikacja używa podczas uruchamiania.
Kiedy
viewWillAppear
zostanie wywołany w głównym kontrolerze widoku, po prostu pokaż fałszywy kontroler widoku bez animacji.kiedy
viewDidAppear
zostaniesz wywołany w twoim fałszywym kontrolerze widoku, odrzuć kontroler widoku z ładną animacją rozpuszczania krzyża.Nie tylko to działa, ale wygląda dobrze! BTW, tylko dla wyjaśnienia robię główny kontroler widoku w
viewWillAppear
ten sposób:źródło
Najnowszy podręcznik programowania systemu iPhone OS zawiera pełną sekcję na ten temat wraz z przykładowym kodem. Jestem pewien, że to nowy dodatek, więc może go przegapiłeś. Wyjaśnia wszystkie warunki, które musisz spełnić; gruntownie...
Poszukaj „Uruchamianie w trybie poziomym”, strona 102.
źródło
Zobacz odpowiedź: Tryb poziomy TYLKO dla iPhone'a lub iPada
Chociaż jeśli używasz trybów mieszanych, może Ci się lepiej przydać
źródło