Vă mulțumim pentru susținere

Aplicația iPhone în modul peisaj, 2008

Notă: această întrebare este din 2008 și acum este de interes istoric.


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

Atât programabil, cât și prin utilizarea interfeței Builder.

0
adăugat editat
Ați încercat să schimbați simbolul folosit de poligoane? Pentru conturul poligonului, alegeți un simbol de linie cartografică, - setați deplasarea simbolului liniei de contur la un număr negativ (pe fila Proprietăți linii).
adăugat autor saint_groceon
Pentru toți cititorii viitori, vă rugăm să rețineți că această problemă celebră este acum rezolvată de Apple începând cu 2011. Notați proiectul de încercare din răspunsul de mai jos.
adăugat autor Fattie
Da. Problema cu asta este că nu poți merge mai mult decât câteva puncte cu linia de frontieră înainte ca să apară tot felul de ciuperci peste și sub picior. Exemplul pic , luat de la
adăugat autor Greg
@matt În scopuri vizuale, după ce simbolizați, afișați datele prin intermediul unui reprezentare cartografică .
adăugat autor DavidWhitney

8 răspunsuri

Utilizați Instrumentul Tampon din caseta de instrumente Analiză și introduceți o valoare negativă pentru distanța tampon. Alegeți OUTSIDE_ONLY pentru tipul lateral și apoi dizolvați atributele relevante.

Necesită licența avansată .

Odată ce există tampoane atribuite, putem folosi Definiții interogări pentru a afișa doar anumite FN-uri și/sau pentru a afișa fiecare cu un simbol separat dintr-o singură clasă de caracteristici.

buffer tool with relevant fields highlighted Using separate symbol for each feature class

7
adăugat

De pe site-ul Apple Dev:

To start your application in landscape mode so that the status bar is in the appropriate position immediately, edit your Info.plist file to add the UIInterfaceOrientation key with the appropriate value (UIInterfaceOrientationLandscapeRight or UIInterfaceOrientationLandscapeLeft), as shown in Listing 2.

Listing 2: Starting your application in landscape mode

UIInterfaceOrientation
UIInterfaceOrientationLandscapeRight
0
adăugat
Întrebarea vă întreabă cum să porniți dispozitivul în modul peisaj. Răspunsurile dau acele informații. Manipularea orientării după aceea nu este menționată în întrebare. +1 Michael Pryor
adăugat autor ingh.am
Intrigant, "răspunsul" de fapt nu va porni dispozitivul în modul peisaj - !! Probabil este cel mai faimos bug / dificultate din toate mediile Apple. Este un lucru esențial pentru dezvoltatorul de iPad care funcționează foarte bine!
adăugat autor Fattie
@mbehan Există, de asemenea, UIInterfaceOrientationPortraitUpsideDown, deci nu este o soluție fixă. În plus, UIInterfaceOrientation în .plist este acceptată numai pe 3.2+, nu pe dispozitivele 3.1.3 și mai vechi (și amintesc că iPhone 2G este blocat pe acea versiune).
adăugat autor Ivan Vučica
Acest plus în metodele dvs. ar trebui să se întoarcă (interfaceOrientation! = UIInterfaceOrientationPortrait); și ați terminat.
adăugat autor mbehan

Răspuns istoric numai. Spectacularly out of date:

Rețineți că acest răspuns este acum extrem de depășit.

Această postare este doar o curiozitate istorică .


Știri interesante! După cum a descoperit Andrew mai jos, această problemă a fost rezolvată de Apple în versiunea 4.0+.

Se pare că nu mai este necesar să se forțeze mărimea vederii pe fiecare vizualizare, iar problema deosebit de serioasă a peisajului "care funcționează numai pentru prima dată" a fost rezolvată.

Începând cu luna aprilie 2011, nu este posibilă testarea sau construirea nici unui lucru sub 4.0, deci întrebarea este o curiozitate istorică. Este incredibil cât de mult a provocat dezvoltatorii atât de mult timp!


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


Este extrem de dificil să faceți acest lucru pe deplin - există cel puțin trei probleme / bug-uri la joc.

try this .. interface builder landscape design

Rețineți, în special, că acolo unde se afișează "și trebuie să utilizați Ar trebui să utilizațiAutorotateToInterfaceOrientation în mod corespunzător pretutindeni" înseamnă peste tot, toate vizualizările dvs. pe ecran complet.

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

O rememorare importantă a problemei ADIȚIONALE cunoscute aici: dacă încercați să schimbați între vizualizarea MAI MULT DE UTILIZARE (toate peisajul), IT nu lucrează simplu . Este esențial să vă amintiți acest lucru sau veți pierde zile cu privire la această problemă. Este literalmente NU POSIBIL. Este cea mai mare eroare deschisă, cunoscută, pe platforma iOS. Nu există literalmente nici o modalitate de a face hardware-ul să facă a doua viziune pe care o încărcați, să fiți peisaj. Soluția enervantă, dar simplă și ceea ce trebuie să faceți este să aveți un maestru trivial UIViewController care nu face nimic altceva decât să stea acolo și să vă lase să schimbați între opiniile voastre.

Cu alte cuvinte, în iOS din cauza unei erori importante de cunoștințe:

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

You can do that only once. Later, if you try to remove happyThing.view, and instead put in there newThing.view, IT DOES NOT WORK - AND THAT'S THAT. The machine will never rotate the view to landscape. There is no trick fix, even Apple cannot make it work. The workaround you must adopt is having an overall UIViewController that simply sits there and just holds your various views (happyThing, newThing, etc). Hope it helps!

0
adăugat
Cred că acest lucru a fost stabilit în 4.x. Am expediat un joc care avea o grămadă de ecrane diferite, un peisaj și un portret, și tocmai nu funcționa în 3.x. Nu doresc să intrăm în viziunea extra manechinului pentru a ne descurca, în schimb ne-am cerut 4.x - care, la un an după ce a fost întrebată această întrebare, este probabil OK.
adăugat autor AndrewS
Nu am făcut "peisaj întotdeauna", ci mai degrabă peisaj sau portret. Fiecare VC este adăugat direct și eliminat din fereastră. Aplicația lansează peisaj, rămâne în acest fel prin mai multe tranziții ale ecranului. Nu folosim o imagine falsă, dar vom suprascrie ar trebui să acționăm în fiecare ecran. Nu există probleme la 4.x, de la touch la pad la telefon.
adăugat autor AndrewS

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

UIInterfaceOrientation
UIInterfaceOrientationLandscapeRight

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 din Interface Builder în modul peisaj.

0
adăugat

Rezumatul și integrarea din toate postările, după ce am testat-o ​​singură; verificați actualizarea pentru 4.x, 5.x de mai jos.

Din 3.2 nu puteți schimba orientarea unei aplicații în execuție din cod.

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

Încercați cu această rețetă:

  1. set your orientation to UISupportedInterfaceOrientations in the Info.plist file
  2. in your window define a 480x320 "base view controller". Every other view will be added as a subview to its view.
  3. in all view controllers set up the shouldAutorotateToInterfaceOrientation: method (to return the same value you defined in the plist, of course)
  4. in all view controllers set a background view with

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

    in the viewDidLoad method.

Update (iOS 4.x, 5.x): the Apple iOS App Programming Guide has a "Launching in Landscape Mode" paragraph in the "Advanced App Tricks" chapter.

Referințe:

0
adăugat
Îmi place cum legătura cu întrebarea SO se leagă de această întrebare.
adăugat autor Richard J. Ross III
Pot confirma că aceasta este singura soluție cu adevărat funcțională (cu un mic plus). Mi-a trebuit ore să găsesc și să evaluez acest lucru. Toate celelalte răspunsuri sunt doar soluții parțiale la problemă.
adăugat autor Johannes Rudolph
Ty Richard, legătura cu buclă eliminată
adăugat autor IlDan

răspunsul lui sasb și michaelpryor pare să fie corect, dar dacă nu funcționează pentru dvs., încercați această alternativă:

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

Sau aceasta:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Sau aceasta:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

De asemenea, este posibil să fiți nevoit să apelați mai întâi fereastra makeKeyAndVisible; .

A few links: Developing in landscape mode, iPhone SDK: How to force Landscape mode only?

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

0
adăugat

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

În toate testele mele, atunci când un dispozitiv de vizualizare modală este eliminat, atunci orientarea preferată a controlerului de vizualizare parinte stabilită în shouldAutorotateToInterfaceOrientation este onorată chiar și atunci când face parte dintr-un UINavigationController. Deci soluția la acest lucru este simplă:

Creați un utilitar UIViewController cu un UIImageView pentru un fundal. Setați imaginea la imaginea implicită.png utilizată de aplicație la pornire.

Când viewWillAppear devine apelat în controlerul dvs. de vizualizare rădăcină, trebuie doar să prezentați controlerul de vizualizare fictiv fără animație.

când viewDidAppear devine apelat în controlerul de vizualizare fals, renunță la controlerul de vizualizare cu o animație frumos dizolvată.

Nu numai că funcționează, dar arată bine! BTW, doar pentru clarificare fac acest lucru viewWillAppear a controlerului de vizualizare rădăcină astfel:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
0
adăugat

See this answer: Landscape Mode ONLY for iPhone or iPad

  1. adăugați orientarea spre plist
  2. ar trebui săAutorotateToInterfaceOrientation = DA în toate fișierele

Deși dacă utilizați moduri mixte, este posibil să fiți mai bine

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
0
adăugat