iPhone app w trybie poziomym, systemy 2008

głosy
88

Uwaga: to pytanie jest od 2008 roku i obecnie jest tylko historycznym.


Jaki jest najlepszy sposób tworzenia aplikacji iPhone, który działa w trybie poziomym od początku, niezależnie od położenia urządzenia?

Zarówno programowo i przy użyciu konstruktora interfejsu.

Utwórz 02/08/2008 o 11:47
źródło użytkownik
W innych językach...                            


8 odpowiedzi

głosy
46

Odpowiedź historyczny tylko. Spektakularnie nieaktualne:

Należy pamiętać, że ta odpowiedź jest teraz niezwykle nieaktualne.

Ten post jest tylko historyczną ciekawostką .


Ekscytujące wiadomości! Jako odkryta przez Andrzeja poniżej, problem ten został rozwiązany przez firmę Apple w wersji 4.0 lub nowszej.

Wydaje się, że nie jest już konieczne, aby wymusić wielkość widoku na każdym widoku, a specyficzny poważny problem krajobrazu „tylko pracy po raz pierwszy” został rozwiązany.

W kwietniu 2011 roku, nie jest możliwe, aby przetestować, a nawet budować niczego poniżej 4,0, więc pytanie jest czysto historyczna ciekawość. To niesamowite, jak wiele kłopotów to spowodowane deweloperzy tak długo!


Oto oryginalny dyskusja i rozwiązanie. To jest zupełnie bez znaczenia teraz, ponieważ te systemy nie są jeszcze dostępne.


Jest to niezwykle trudne, aby to dzieło w pełni - istnieją co najmniej trzy problemy / bugi w grze.

spróbuj tego .. projektowania interfejsu budowniczy krajobraz

Zwrócić szczególną uwagę na to, w którym jest napisane „i trzeba użyć shouldAutorotateToInterfaceOrientation właściwie wszędzie” oznacza, że wszędzie, wszystkie fullscreen widoki.

Nadzieję, że to pomaga w tego koszmaru!

Ważnym przypomnieniem dodatkowego znanego problemu pod ręką tutaj: jeśli próbuje zamienić między WIĘCEJ NIŻ JEDNĄ widzenia (poziomo) wszystko, po prostu NIE DZIAŁA . Istotne jest, aby pamiętać, to czy będziesz tracić dni na problemie. To jest dosłownie niemożliwe. Jest to największy otwarty, znany bug na platformie iOS. Jest dosłownie nie sposób, aby sprzęt sprawiają, że drugi widok ładowanego być krajobraz. Irytujące, ale proste obejście, i co trzeba zrobić, to mieć trywialny główny UIViewController, że nic nie robi, ale siedzieć i pozwala przełączać się między swoimi widokami.

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

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

Można to zrobić tylko raz . Później, jeśli starają się usunąć happyThing.view i zamiast umieścić tam newThing.view, to nie działa - i tyle. Maszyna nigdy nie obrócić widok na poziomą. Nie ma trik naprawić, nawet Apple nie może działać. Obejście należy przyjąć jest posiadanie ogólnej UIViewController, które po prostu siedzi tam i po prostu trzyma swoje różne widoki (happyThing, nowa rzecz, etc). Mam nadzieję, że to pomoże!

Odpowiedział 27/03/2010 o 22:13
źródło użytkownik

głosy
40

Z Apple Dev Site:

Aby uruchomić aplikację w trybie poziomym, tak aby pasek stanu znajduje się w odpowiednim miejscu bezpośrednio, edytować plik Info.plist aby dodać klucz UIInterfaceOrientation z odpowiednią wartością (UIInterfaceOrientationLandscapeRight lub UIInterfaceOrientationLandscapeLeft), jak pokazano na listingu 2.

Listing 2: Uruchamianie aplikacji w trybie poziomym

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
Odpowiedział 31/08/2008 o 15:38
źródło użytkownik

głosy
27

Podsumowanie i integracja ze wszystkich stanowisk, po przetestowaniu go samodzielnie; sprawdzić aktualizację 4.x, 5.x poniżej.

Począwszy od 3.2 nie można zmienić orientację działającej aplikacji z kodu.

Ale można uruchomić aplikację z orientacją stałym, choć robi więc nie jest to proste.

Spróbuj z tym przepisem:

  1. ustawić orientację UISupportedInterfaceOrientationsw Info.plistpliku
  2. w oknie definiowania 480x320 „Widok od strony podstawy sterowania”. Każdy inny widok zostanie dodany jako podrzędny do jej widoku.
  3. we wszystkich kontrolerów widoku skonfigurować shouldAutorotateToInterfaceOrientation:metodę (powrót tą samą wartość zdefiniowaną w plist, oczywiście)
  4. we wszystkich kontrolerów widoku ustawić tło widoku z

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

    W viewDidLoadmetodzie.

Update (iOS 4.x, 5.x) : Programowanie Przewodnik Apple iOS App ma „Uruchomienie w trybie poziomym” paragraf w „Advanced App Sztuczki” rozdziału.

Referencje:

Odpowiedział 07/05/2010 o 12:02
źródło użytkownik

głosy
7

Najpierw ustawić w Info.plist

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

następnie umieścić 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ć na widoku interfejsu Builder w trybie poziomym.

Odpowiedział 20/11/2009 o 21:58
źródło użytkownik

głosy
6

Odpowiedź sasb i michaelpryor wydaje się być poprawne, ale jeśli to nie działa dla Ciebie, spróbuj tego alternatywnego:

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

Albo ten:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Albo ten:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

Można również zadzwonić window makeKeyAndVisible;pierwszy.

Kilka linków: Rozwijanie w trybie poziomym , iPhone SDK: Jak zmusić tylko trybie poziomym?

@Robert: patrz iPhone SDK NDA i przepełnienie stosu .

Odpowiedział 31/08/2008 o 16:01
źródło użytkownik

głosy
5

Jestem zaskoczony nikt nie ma pochodzić z tej odpowiedzi jeszcze:

We wszystkich moich testów, kiedy odwoływanie modalne kontroler widoku nadrzędnego widzenia regulatora ustawić preferowaną orientację w shouldAutorotateToInterfaceOrientationjest zaszczycony nawet gdy część UINavigationController. Więc rozwiązanie tego problemu jest proste:

Tworzenie obojętne UIViewController z UIImageView na tle. Ustawić obraz w obrazie Default.png aplikacja używa na starcie.

Kiedy viewWillAppearzostanie wywołany w kontrolerze widoku głównego, po prostu przedstawić atrapę kontroler widoku bez animacji.

gdy viewDidAppearzostanie wywołany w manekina kontrolera widoku, odrzucenie kontroler widok z ładnym krzyż rozpuścić animacji.

To nie tylko praca, ale wygląda dobrze! BTW, tylko dla wyjaśnienia zrobić widoku głównego kontrolera viewWillAppeartak:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
Odpowiedział 27/11/2010 o 08:38
źródło użytkownik

głosy
4

Najnowszy iPhone OS Programming Guide ma cały rozdział na ten temat, z przykładowego kodu. Jestem pewien, że jest to ostatni dodatek, więc może go przegapić. Wyjaśnia ona wszystkie warunki musisz spełniać; gruntownie...

  • ustawić właściwości Info.plist (zmienia pozycję na pasku stanu, ale nie widok)
  • obracać widok ręcznie wokół jej środka, albo na swojej UIViewController viewDidLoad: metodę lub swoją applicationDidFinishLaunching: metodę lub wdrożenie automatycznego obrotu ( „automatycznej zmiany zachowań”, strona 124)

Spójrz na „Uruchomienie w trybie poziomym”, strona 102.

Odpowiedział 04/09/2008 o 22:57
źródło użytkownik

głosy
3

Zobacz tę odpowiedź: trybie poziomym tylko na iPhonie lub iPadzie

  1. dodać orientację PLIST
  2. shouldAutorotateToInterfaceOrientation = TAK we wszystkich plikach

Chociaż, jeśli używasz tryby mieszane, może być lepiej z

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Odpowiedział 06/03/2011 o 08:56
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more