Vra

Let wel:hierdie vraag is van 2008 en is nou slegs van historiese belang.


Wat is die beste manier om 'n iPhone-toepassing te skep wat van die begin af in landskapmodus werk, ongeag die posisie van die toestel?

Beide programmaties en met behulp van die Interface Builder.

Was dit nuttig?

Oplossing

Slegs historiese antwoord.Spektakulêr verouderd:

Neem asseblief kennis dat hierdie antwoord nou baie verouderd is.

Hierdie pos is slegs 'n historiese nuuskierigheid.


Opwindende nuus!Soos ontdek deur Andrew hieronder, is hierdie probleem deur Apple in 4.0+ opgelos.

Dit wil voorkom asof dit NIE meer nodig is om die grootte van die uitsig op elke uitsig af te dwing nie, en die spesifieke ernstige probleem van landskap "werk net die eerste keer" is opgelos.

Vanaf April 2011 is dit nie moontlik om enigiets onder 4.0 te toets of selfs te bou nie, so die vraag is bloot 'n geskiedkundige nuuskierigheid.Dit is ongelooflik hoeveel moeite dit ontwikkelaars so lank veroorsaak het!


Hier is die oorspronklike bespreking en oplossing.Dit is nou heeltemal irrelevant, aangesien hierdie stelsels nie eers werkbaar is nie.


Dit is UITERS MOEILIK om dit ten volle te laat werk -- daar is ten minste drie probleme/foute wat speel.

probeer hierdie .. koppelvlakbouer landskapontwerp

Let veral op dat waar dit staan "en jy moet shouldAutorotateToInterfaceOrientation oral behoorlik gebruik" dit beteken oral, al jou volskerm-aansigte.

Hoop dit help in hierdie nagmerrie!

'n Belangrike herinnering aan die ADDISIONELE bekende probleem wat hier ter sprake is:as jy probeer om te ruil tussen MEER AS EEN uitsig (alle landskap), DIT WERK EENVOUDIG NIE.Dit is noodsaaklik om dit te onthou of jy mors dae op die probleem.Dit is letterlik NIE MOONTLIK NIE.Dit is die grootste oop, bekende fout op die iOS-platform.Daar is letterlik geen manier om die hardeware die tweede aansig wat jy laai, landskap te maak nie.Die irriterende maar eenvoudige oplossing, en wat jy moet doen, is om 'n onbenullige meester UIViewController te hê wat niks anders doen as om daar te sit en jou tussen jou sienings te laat ruil nie.

Met ander woorde, in iOS as gevolg van 'n groot kennisfout:

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

Jy kan dit net een keer doen.As jy later probeer om happyThing.view te verwyder, en eerder newThing.view daar insit, WERK DIT NIE - EN DIS DIT.Die masjien sal nooit die aansig na landskap draai nie.Daar is geen truukoplossing nie, selfs Apple kan dit nie laat werk nie.Die oplossing wat u moet aanneem, is om 'n algehele UIViewController te hê wat eenvoudig daar sit en net u verskillende sienings (happyThing, newThing, ens.) bevat.Hoop dit help!

Ander wenke

Van die Apple Dev-webwerf:

Om u toepassing in die landskapmodus te begin, sodat die statusbalk onmiddellik in die toepaslike posisie is, wysig u Info.plist -lêer om die UIInterfaceOrientation -sleutel by te voeg met die toepaslike waarde (UIInterfaceOrientationLandScapeight of UIInterfaceOrientationLandScapeleft), soos getoon in lys 2.

Lys 2:Begin u aansoek in die landskapmodus

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

Opsomming en integrasie van al die plasings, nadat ek dit self getoets het;kyk na die opdatering vir 4.x, 5.x hieronder.

Vanaf 3.2 kan jy nie die oriëntasie van 'n lopende toepassing van kode verander nie.

Maar jy kan 'n toepassing met 'n vaste oriëntasie begin, hoewel dit nie maklik is om dit te doen nie.

Probeer met hierdie resep:

  1. stel jou oriëntasie op UISupportedInterfaceOrientations in die Info.plist lêer
  2. definieer 'n 480x320 "basisaansigbeheerder" in jou venster.Elke ander aansig sal as 'n subaansig by sy aansig gevoeg word.
  3. in alle aansig beheerders stel die op shouldAutorotateToInterfaceOrientation: metode (om dieselfde waarde terug te gee wat jy in die plist gedefinieer het, natuurlik)
  4. in alle aansig stel beheerders 'n agtergrondaansig met

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

    in die viewDidLoad metode.

Opdatering (iOS 4.x, 5.x):die Apple iOS App Programming Guide het 'n "Begin in Landskapmodus" paragraaf in die "Gevorderde toepassing truuks" hoofstuk.

Verwysings:

Eers stel ek in info.plist

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

dan plaas ek hierdie kode in 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)]; 

Op hierdie manier kan ek aan die aansig in Interface Builder in landskapmodus werk.

Sasb en michaelpryor se antwoord blyk korrek te wees, maar as dit nie vir jou werk nie, probeer hierdie alternatief:

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

Of hierdie een:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Of hierdie een:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

Jy sal dalk ook moet bel window makeKeyAndVisible; eerste.

'n Paar skakels: Ontwikkel in landskapmodus, iPhone SDK:Hoe om slegs Landskapmodus te dwing?

@Robert:verwys asseblief na Die iPhone SDK, NDA en Stack Overflow.

Ek is verbaas dat niemand nog met hierdie antwoord vorendag gekom het nie:

In al my toetse, wanneer 'n modale aansigbeheerder ontslaan word, stel die oueraansigbeheerder se voorkeuroriëntasie in shouldAutorotateToInterfaceOrientation word vereer selfs wanneer dit deel is van 'n UINavigationController.Die oplossing hiervoor is dus eenvoudig:

Skep 'n dummy UIViewController met 'n UIImageView vir 'n agtergrond.Stel die prent na die default.png-prent wat jou toepassing tydens opstart gebruik.

Wanneer viewWillAppear word in jou wortelaansigbeheerder geroep, bied net die dummy-aansigbeheerder sonder animasie aan.

wanneer viewDidAppear in jou dummy-aansigbeheerder geroep word, maak die aansigbeheerder af met 'n lekker kruisoplos-animasie.

Dit werk nie net nie, maar dit lyk goed!BTW, net ter verduideliking doen ek die wortelaansig kontroleerder se viewWillAppear soos hierdie:

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

Die nuutste iPhone OS-programmeergids het 'n volledige afdeling hieroor, met voorbeeldkode.Ek is seker dit is 'n onlangse toevoeging, so miskien het jy dit gemis.Dit verduidelik al die voorwaardes waaraan jy moet voldoen;basies...

  • stel die Info.plist-eienskappe in (dit verander die posisie van die statusbalk, maar nie die aansig nie)
  • draai jou aansig handmatig om sy middel, op óf jou UIViewController viewDidLoad:metode of jou aansoekDidFinishLaunching:metode of implementeer outo-rotasie ("Outomatiese groottegedrag", bladsy 124)

Soek "Begin in landskapmodus", bladsy 102.

Sien hierdie antwoord: Landskapmodus SLEGS vir iPhone of iPad

  1. voeg oriëntasie by plist
  2. shouldAutorotateToInterfaceOrientation = JA in alle lêers

Alhoewel as jy gemengde modusse gebruik, kan jy beter daaraan toe wees

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top