iPhone App în modul peisaj, 2008 Sisteme

voturi
88

Notă: această întrebare este din 2008, iar acum este de doar interes istoric.


Care este cel mai bun mod de a crea o aplicație pentru iPhone, care rulează în modul peisaj de la început, indiferent de poziția dispozitivului?

Atât programatic și utilizând interfața Builder.

Întrebat 02/08/2008 la 11:47
sursa de către utilizator
În alte limbi...                            


8 răspunsuri

voturi
46

Răspuns istoric numai. Spectaculos de data:

Vă rugăm să rețineți că acest răspuns este acum extrem de actualitate.

Acest post este doar o curiozitate istorică .


stiri interesante! După cum a descoperit de Andrew mai jos, această problemă a fost stabilită de către Apple în 4.0+.

Se pare că nu mai este necesară pentru a forța dimensiunea vizualizarea pe fiecare vedere, și problema gravă specifică a peisajului „numai de lucru prima dată“ a fost rezolvată.

Începând din aprilie 2011, nu este posibil de a testa sau chiar construi ceva mai jos 4.0, astfel încât întrebarea este pur și simplu o curiozitate istorică. Este incredibil cât de mult probleme a cauzat dezvoltatori atât de mult timp!


Aici este discuția inițială și soluția. Acest lucru este cu totul irelevant acum, deoarece aceste sisteme nu sunt chiar operabile.


Este extrem de dificil de a face pe deplin acest lucru - există cel puțin trei probleme / bug-uri în joc.

încercați acest lucru .. design de interfață constructor de peisaj

Rețineți că , în special , în cazul în care se spune „și trebuie să utilizați în mod corespunzător shouldAutorotateToInterfaceOrientation peste tot“ înseamnă peste tot, toate punctele de vedere dvs. de ecran complet.

Sper că vă ajută în acest coșmar!

Un memento important al problemei SUPLIMENTAR bine - cunoscut la îndemână aici: dacă încercați să facă schimb între MAI MULT DE O vizualizare (toate peisaj), IT SIMPLU nu funcționează . Este esențial să vă amintiți acest lucru sau vei irosi zile pe problema. NU este literalmente posibil. Acesta este cel mai mare deschis, cunoscut, bug - ul pe platforma iOS. Nu este literalmente nici o modalitate de a face hardware - ul face al doilea punctul de vedere vă încărcați, să fie peisaj. Workaround enervant , dar simplu, și ce trebuie să faci, este să aibă un UIViewController maestru banal care nu face nimic decât să stea acolo și să vă schimb între opiniile dumneavoastră.

Cu alte cuvinte, în iOS, din cauza unei erori majore de know:

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

Puteți face acest lucru doar o singură dată . Mai târziu, dacă încercați să eliminați happyThing.view, șipusschimb acolo newThing.view, nu merge - șiasta basta. Aparatul nuva roti imaginea la peisaj. Nu există nicitruc fix, chiarApple nupoate face să funcționeze. Workaround trebuieadopte are o UIViewController generală care pursimplu stă acolo și doar deține vizualizările diferite (happyThing, newThing, etc). Sper ca ajuta!

Publicat 27/03/2010 la 22:13
sursa de către utilizator

voturi
40

De la Apple Dev site-ul:

Pentru a porni aplicația în modul peisaj, astfel încât bara de stare se află în poziția corespunzătoare imediat, modificați fișierul Info.plist pentru a adăuga cheia UIInterfaceOrientation cu valoarea corespunzătoare (UIInterfaceOrientationLandscapeRight sau UIInterfaceOrientationLandscapeLeft), așa cum se arată în Listarea 2.

Listarea 2: Pornirea aplicației în modul peisaj

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
Publicat 31/08/2008 la 15:38
sursa de către utilizator

voturi
27

Rezumatul și integrarea din toate posturile, după testarea acestuia eu; verifica actualizarea pentru 4.x, 5.x de mai jos.

Ca de 3.2 nu se poate modifica orientarea unei aplicații care rulează de la codul.

Dar puteți începe o aplicație cu o orientare fixă, cu toate că acest lucru nu este simplu.

Încercați cu aceasta reteta:

  1. setați orientarea spre UISupportedInterfaceOrientationsîn Info.plistfișierul
  2. în fereastra defini o „vizualizare controler de bază“ 480x320. Orice alte puncte de vedere va fi adăugat ca subview la punctul său de vedere.
  3. în toate controlerele vizualizare configura shouldAutorotateToInterfaceOrientation:metoda (pentru a reveni aceeași valoare pe care este definită în fișierul .plist, desigur)
  4. în toate controlerele vizualizare setat o vizualizare de fundal cu

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

    în viewDidLoadmetoda.

Actualizare (iOS 4.x, 5.x) : Ghidul de programare iOS Apple App are o „Lansarea în modul peisaj“ în paragraful „Trucuri App avansată“ capitol.

Referințe:

Publicat 07/05/2010 la 12:02
sursa de către utilizator

voturi
7

Mai întâi am stabilit în info.plist

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

apoi am pus acest cod în 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)]; 

În acest fel pot lucra la vizualizarea în Interface Builder în modul peisaj.

Publicat 20/11/2009 la 21:58
sursa de către utilizator

voturi
6

Răspunsul lui sasb și michaelpryor pare să fie corectă, dar dacă nu este de lucru pentru tine, încercați această alternativă:

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

Sau aceasta:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Sau aceasta:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

Este posibil , de asemenea , pentru a apela mai window makeKeyAndVisible;întâi.

Câteva link - uri: Dezvoltarea în modul peisaj , iPhone SDK: Cum de a forța numai în modul Landscape?

@Robert: vă rugăm să consultați iPhone SDK - ul, NDA, și Stack Overflow .

Publicat 31/08/2008 la 16:01
sursa de către utilizator

voturi
5

Sunt surprins nimeni nu a venit cu acest răspuns încă:

In toate testele mele atunci când un controler de respingere a unei vedere modal de orientare preferată, mamă a controlerului de vedere stabilit în shouldAutorotateToInterfaceOrientationeste onorat chiar și atunci când o parte a unui UINavigationController. Deci , soluția la acest lucru este simplu:

Creați un UIViewController fals cu un UIImageView pentru un fundal. Setați imaginea la imaginea default.png aplicația utilizează la pornire.

Atunci când viewWillAppeareste chemat în controlerul vedere rădăcină, să prezinte doar controlerul vizualizare fără animație fictiv.

atunci când viewDidAppeareste chemat în controlerul vedere fictiv, respingerea controllerul vedere cu o cruce frumoasă dizolvă animație.

Nu numai ca acest lucru, dar se pare bine! BTW, doar pentru clarificare i face vizualizarea rădăcină controlerului viewWillAppearca aceasta:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
Publicat 27/11/2010 la 08:38
sursa de către utilizator

voturi
4

Cel mai recent Ghidul de programare iPhone OS are o secțiune completă în acest sens, cu mostre de cod. Sunt sigur că acest lucru este un plus recent, așa că poate ai ratat-o. Aceasta explică toate condițiile pe care trebuie să le îndeplinească; pe scurt...

  • setați proprietățile Info.plist (acest lucru schimbă poziția barei de stare, dar nu și punctul de vedere)
  • rotiți vizualizarea manual în jurul centrului său, fie pe dvs. UIViewController viewDidLoad: metoda sau applicationDidFinishLaunching dumneavoastră: metoda sau pune în aplicare rotire automată ( „comportamente Autoresizing“, pagina 124)

Uita-te pentru „Lansarea în modul peisaj“, pagina 102.

Publicat 04/09/2008 la 22:57
sursa de către utilizator

voturi
3

A se vedea acest răspuns: Mod Peisaj DOAR pentru iPhone sau iPad

  1. adaugă orientarea către Plist
  2. shouldAutorotateToInterfaceOrientation = DA în toate fișierele

Deși dacă utilizați moduri mixte, s-ar putea fi mai bine cu

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Publicat 06/03/2011 la 08:56
sursa de către utilizator

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