ios - Aplikacja na iPhone w trybie poziomym, systemy 2008

Translate

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 początku działa w trybie poziomym, niezależnie od położenia urządzenia?

Zarówno programowo, jak i przy użyciu Interface Builder.

This question and all comments follow the "Attribution Required."

Wszystkie odpowiedzi

Translate

Tylko odpowiedź historyczna. Spektakularnie nieaktualny.

Należy pamiętać, że ta odpowiedź jest teraz bardzo nieaktualna /

Ta odpowiedź brzmitylko 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 r. 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 dla konstruktora interfejsu

Zwróć uwagę w szczególności na to, gdzie jest napisane„i wszędzie trzeba prawidłowo używać shouldAutorotateToInterfaceOrientation”oznacza to wszędzie, wszystkie widoki na pełnym ekranie.

Mam nadzieję, że pomoże to w tym koszmarze!

Ważne przypomnienie o DODATKOWYM dobrze znanym problemie: jeśli próbujesz się przełączaćWIĘCEJ NIŻ JEDENwidok (cały krajobraz),PO PROSTU NIE DZIAŁA. Pamiętaj o tym, bo inaczej stracisz dni na problem. To dosłownie NIE MOŻLIWE. Jest to największy otwarty, znany błąd na platformie iOS. Nie ma dosłownie żadnego sposobu, aby sprzęt wykonał drugi ładowany widok - 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 ci przełączać się między widokami.

Innymi słowy, w iOS z powodu poważnego znanego błędu:

[window addSubview:happyThing.view];
[window makeKeyAndVisible];

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 znajduje się tam i po prostu przechowuje różne widoki (happyThing, newThing itp.). Mam nadzieję, że to pomoże!

Źródło
Translate

Z witryny Apple Dev:

Aby uruchomić aplikację w trybie poziomym, tak aby pasek stanu znalazł się natychmiast w odpowiednim miejscu, edytuj plik Info.plist, dodając klucz UIInterfaceOrientation z odpowiednią wartością (UIInterfaceOrientationLcapesRight lub UIInterfaceOrientationLcapesLeft), jak pokazano na liście 2.

Listing 2: Uruchamianie aplikacji w trybie poziomym

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
Źródło
Translate

Podsumowanie i integracja ze wszystkich postów, po samodzielnym przetestowaniu; sprawdź aktualizację dla wersji 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:

  1. ustaw swoją orientację naUISupportedInterfaceOrientationswInfo.plistplik
  2. w oknie zdefiniuj "kontroler widoku podstawowego" 480x320. Każdy inny widok zostanie dodany jako widok podrzędny do jego widoku.
  3. we wszystkich kontrolerach widoku konfigurujeshouldAutorotateToInterfaceOrientation:metoda (oczywiście aby zwrócić tę samą wartość, którą zdefiniowałeś w pliku plist)
  4. we wszystkich kontrolerach widoku ustawia widok w tle za pomocą

    self.view.frame = CGRectMake(0, 0, 480, 320)

    wviewDidLoadmetoda.

Aktualizacja (iOS 4.x, 5.x): Podręcznik programowania aplikacji na system Apple iOS zawiera akapit „Uruchamianie w trybie poziomym” w rozdziale „Zaawansowane sztuczki z aplikacjami”.

Bibliografia:

Źródło
Translate

Najpierw ustawiłem w info.plist

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

następnie umieściłem ten kod w applicationDidFinishLaunching:

CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633);
[window setTransform:rotate];

CGRect contentRect = CGRectMake(0, 0, 480, 320); 
window.bounds = contentRect; 
[window setCenter:CGPointMake(160.0f, 240.0f)]; 

W ten sposób mogę pracować nad widokiem w Interface Builder w trybie poziomym.

Źródło
Translate

Odpowiedź sasba i michaelpryora wydaje się być poprawna, ale jeśli to nie działa, wypróbuj tę alternatywę:

- (void)applicationDidFinishLaunchingUIApplication *)application {
    application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}

Albo ten:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Albo ten:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

Być może będziesz musiał zadzwonićwindow makeKeyAndVisible;pierwszy.

Kilka linków:Rozwijanie w trybie poziomym, iPhone SDK: Jak wymusić tylko tryb poziomy?

@Robert: zapoznaj się zIPhone SDK, NDA i Stack Overflow.

Źródło
Translate

Dziwię się, że nikt jeszcze nie wymyślił takiej odpowiedzi:

We wszystkich moich testach, gdy odrzucam modalny kontroler widoku, ustawiono preferowaną orientację nadrzędnego kontrolera widokushouldAutorotateToInterfaceOrientationjest honorowany nawet wtedy, gdy 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.

GdyviewWillAppearzostanie wywołany w głównym kontrolerze widoku, po prostu pokaż fałszywy kontroler widoku bez animacji.

gdyviewDidAppearzostanie wywołany w twoim sztucznym kontrolerze widoku, odrzuć kontroler widoku za pomocą ładnej animacji rozpuszczania krzyża.

Nie tylko to działa, ale wygląda dobrze! BTW, tylko dla wyjaśnienia robię główny kontroler widokuviewWillAppearlubię to:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
Źródło
Muriel Lee
Translate

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...

  • ustawić właściwości Info.plist (zmienia to położenie paska stanu, ale nie widok)
  • obróć widok ręcznie wokół jego środka, w metodzie UIViewController viewDidLoad: lub w metodzie applicationDidFinishLaunching: lub zaimplementuj automatyczne obracanie („Zachowania automatycznego zmiany rozmiaru”, strona 124)

Poszukaj „Uruchamianie w trybie poziomym”, strona 102.

Źródło
Translate

Zobacz tę odpowiedź:Tryb poziomy TYLKO dla iPhone'a lub iPada

  1. dodaj orientację do plist
  2. shouldAutorotateToInterfaceOrientation = YES we wszystkich plikach

Chociaż jeśli używasz trybów mieszanych, może być lepiej z

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Źródło