aplikacja iPhone w trybie krajobrazowym, systemy 2008

Uwaga: to pytanie pochodzi z 2008 roku i teraz ma tylko historyczne znaczenie.


Jaki jest najlepszy sposób na stworzenie aplikacji na iPhone ' a, która działa w trybie poziomym od początku, niezależnie od pozycji urządzenia?

Zarówno programowo, jak i za pomocą Kreatora interfejsów.

Author: Vadim Kotov, 2008-08-02

8 answers

Tylko historyczna odpowiedź.

Proszę zauważyć, że ta odpowiedź jest teraz bardzo nieaktualna.

Ten post jest tylko ciekawostką historyczną .


Ekscytujące wieści! Jak odkrył Andrew poniżej, ten problem został naprawiony przez Apple w 4.0+.

Wydaje się, że nie jest już konieczne wymuszanie wielkości widoku na każdym widoku, a konkretny poważny problem krajobrazu "działa tylko za pierwszym razem" został rozwiązany.

Od kwietnia 2011 roku nie można testować ani nawet budować niczego poniżej 4.0, więc pytanie jest czysto historyczną ciekawostką. To niesamowite, jak wiele kłopotów sprawiało deweloperom przez tak długi czas!


Oto oryginalna dyskusja i rozwiązanie. Jest to teraz zupełnie nieistotne, ponieważ systemy te nie są nawet sprawne.


Jest niezwykle trudne, aby to działało w pełni -- istnieją co najmniej trzy problemy/błędy w grze.

Spróbuj tego .. interface builder landscape design

Zauważ w szczególności, że tam, gdzie jest napisane "i musisz używać shouldAutorotateToInterfaceOrientation właściwie wszędzie" oznacza to wszędzie, wszystkie swoje pełnoekranowe widoki.

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

Ważne przypomnienie o dodatkowym dobrze znanym problemie pod ręką tutaj: jeśli próbujesz zamienić między więcej niż jeden widok (cały krajobraz), po prostu nie Praca. Ważne jest, aby o tym pamiętać, lub będziesz tracić dni na problem. To dosłownie niemożliwe. Jest to największy znany, otwarty błąd na platformie iOS. Nie ma dosłownie sposobu, aby sprzęt sprawił, że drugi widok, który załadujesz, będzie krajobrazowy. Irytujące, ale proste obejście i to, co musisz zrobić, to mieć trywialny Master UIViewController, który nie robi nic, ale siedzi i pozwala na wymianę poglądów.

Innymi słowy, w iOS z powodu dużej wiedzy bug: {]}

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

możesz to zrobić tylko raz. Później, jeśli spróbujesz usunąć happyThing.widok, a zamiast tego umieścić tam coś nowego.Widok, to nie działa - i tyle. Maszyna nigdy nie obróci widoku na krajobraz. Nie ma żadnej sztuczki, nawet Apple nie może tego zrobić. Obejście, które musisz przyjąć, to posiadanie ogólnego kontrolera UIViewController, który po prostu siedzi i po prostu przechowuje różne poglądy (happyThing, newThing, itp.). Mam nadzieję, że to pomoże!

 46
Author: Fattie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-11 13:03:13

Ze strony Apple Dev:

Aby uruchomić aplikację w krajobrazie Tryb, tak aby pasek stanu znajdował się w odpowiednia pozycja natychmiast, edytuj Twoje informacje.plik plist do dodania UIInterfaceOrientation key with the wartość właściwa (UIInterfaceOrientationLandscapeRight lub UIInterfaceOrientationLandscapeLeft), jak pokazano w wykazie 2.

Listing 2: Uruchamianie aplikacji w trybie poziomym

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
 40
Author: Michael Pryor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-31 14:38:14

Podsumowanie i integracja ze wszystkich postów, po przetestowaniu go osobiście; Sprawdź aktualizację dla 4.x, 5.x poniżej.

Od wersji 3.2 nie można zmienić orientacji uruchomionej aplikacji z kodu.

Ale możesz uruchomić aplikację ze stałą orientacją, chociaż nie jest to proste.

Wypróbuj ten przepis:

  1. Ustaw orientację na UISupportedInterfaceOrientations w pliku Info.plist
  2. w oknie zdefiniuj widok bazowy 480x320" kontroler". Każdy inny widok zostanie dodany jako subview do jego widoku.
  3. we wszystkich kontrolerach widoku należy ustawić metodę shouldAutorotateToInterfaceOrientation: (oczywiście zwracającą tę samą wartość, którą zdefiniowałeś w pliście)
  4. We wszystkich kontrolerach widoku Ustaw widok w tle za pomocą

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

    W metodzie viewDidLoad.

Aktualizacja (iOS 4.x, 5.x) : przewodnik programowania aplikacji Apple iOS zawiera akapit "uruchamianie w trybie poziomym" w "zaawansowane sztuczki aplikacji" rozdział.

Bibliografia:

 27
Author: IlDan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-18 13:52:33

Najpierw ustawiłem info.plist

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

Następnie umieszczam ten kod w aplikacji:

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ć na widoku w Interface Builderze w trybie poziomym.

 7
Author: samvermette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-20 20:58:38

Odpowiedź Sasba i michaelpryora wydaje się być poprawna, ale jeśli to nie działa dla ciebie, spróbuj tej alternatywy:

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

Lub ten:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Lub ten:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];
Możesz też najpierw zadzwonić.

Kilka linków: rozwijające się w trybie krajobrazowym, iPhone SDK: jak wymusić tylko tryb krajobrazowy?

@Robert: proszę odnieść się do iPhone SDK, NDA i Stack Overflow.

 6
Author: Sören Kuklau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:30:52

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

We wszystkich moich testach, gdy kontroler widoku modalnego jest odrzucany, preferowana orientacja kontrolera widoku nadrzędnego ustawiona w shouldAutorotateToInterfaceOrientation jest honorowana nawet wtedy, gdy część kontrolera widoku uinavigationcontroller. Rozwiązanie tego problemu jest więc proste:

Utwórz atrapę kontrolera UIViewController z interfejsem UIImageView dla tła. Ustaw obraz na domyślny.obraz png używany przez aplikację podczas uruchamiania.

Kiedy {[2] } zostanie wywołana w kontrolerze widoku głównego, po prostu przedstawienie kontrolera widoku bez animacji.

Kiedy {[3] } zostanie wywołany w kontrolerze atrapy widoku, Odrzuć kontroler widoku za pomocą ładnej animacji krzyżowej.

To nie tylko działa, ale wygląda dobrze! BTW, dla wyjaśnienia robię kontroler widoku głównego viewWillAppear Tak:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
 5
Author: Arlen Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-27 07:38:02

Najnowszy przewodnik programowania iPhone OS zawiera pełną sekcję na ten temat, z przykładowym kodem. Jestem pewien, że to niedawny dodatek, więc może go przegapiłeś. Wyjaśnia wszystkie warunki, które musisz spełnić; w zasadzie...

  • Ustaw Info.właściwości plist (zmienia położenie paska stanu, ale nie widoku)
  • Obróć widok ręcznie wokół jego środka, albo na UIViewController viewDidLoad: method albo na applicationDidFinishLaunching: method lub zaimplementuj automatyczna rotacja ("Autoresizing behaviors", strona 124)

Poszukaj "uruchomienie w trybie poziomym", strona 102.

 4
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-04 21:57:05

Zobacz tę odpowiedź: Tryb krajobrazowy tylko dla iPhone lub iPad

  1. Dodaj orientację do plist
  2. shouldAutorotateToInterfaceOrientation = tak we wszystkich plikach

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

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
 3
Author: nicc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:32