iPhone app i liggende modus, 2008-systemer

stemmer
92

Merk: Dette spørsmålet er fra 2008, og nå er på kun historisk interesse.


Hva er den beste måten å lage en iPhone-applikasjon som kjører i liggende modus fra start, uavhengig av plasseringen av enheten?

Både programmatisk og bruker Interface Builder.

Publisert på 02/08/2008 klokken 10:47
kilden bruker
På andre språk...                            


8 svar

stemmer
46

Historisk svaret bare. Spektakulært utdatert:

Vær oppmerksom på at dette svaret er nå enormt utdatert.

Dette innlegget er bare en historisk kuriositet .


Spennende nyheter! Som oppdaget av Andrew nedenfor, har dette problemet blitt løst av Apple i 4.0+.

Det ville synes det ikke lenger er nødvendig å tvinge størrelsen på visningen på hver visning, og den spesifikke alvorlig problem i landskapet "bare arbeider første gang" er løst.

Per april 2011, er det ikke mulig å teste eller bygge noe under 4,0, så spørsmålet er rent et historisk kuriositet. Det er utrolig hvor mye problemer det forårsaket utviklere så lenge!


Her er den opprinnelige diskusjon og løsning. Dette er helt irrelevant nå, da disse systemene er ikke engang betjenes.


Det er svært vanskelig å gjøre dette arbeidet fullt - det er minst tre problemer / bugs på spill.

Prøv dette .. Interface Builder landskap design

Legg spesielt merke til at der det står "og du må bruke shouldAutorotateToInterfaceOrientation ordentlig overalt" betyr overalt, alle fullscreen visninger.

Håper det hjelper i dette marerittet!

En viktig påminnelse om EKSTRA velkjent problem for hånden her: hvis du prøver å bytte mellom MER ENN EN view (alle liggende), IT slett ikke fungerer . Det er viktig å huske dette, eller du vil kaste bort dager på problemet. Det er bokstavelig talt ikke mulig. Det er den største åpne, kjent bug på iOS-plattformen. Det er bokstavelig talt ingen måte å gjøre maskinvaren gjør andre visningen du laste, være landskapet. Den irriterende, men enkel løsning, og hva du må gjøre, er å ha en triviell mester UIViewController som ikke gjør annet enn å sitte der og la deg bytte mellom dine synspunkter.

Med andre ord, i iOS på grunn av en stor know bug:

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

Du kan gjøre det bare en gang . Senere, hvis du prøver å fjerne happyThing.view, og i stedet satt der newThing.view, IT fungerer ikke - og det er det. Maskinen vil aldri rotere visningen til landskapet. Det er ingen triks fikse, selv Apple ikke kan gjøre det arbeidet. Løsningen må du adoptere er å ha en samlet UIViewController som bare sitter der og bare holder ulike synspunkter (happyThing, newThing, etc). Håper det hjelper!

Svarte 27/03/2010 kl. 21:13
kilden bruker

stemmer
40

Fra Apple Dev nettstedet:

For å starte programmet i liggende modus, slik at statuslinjen er i riktig posisjon umiddelbart, redigere Info.plist fil for å legge til UIInterfaceOrientation tasten med den aktuelle verdien (UIInterfaceOrientationLandscapeRight eller UIInterfaceOrientationLandscapeLeft), som vist i Listing 2.

Listing 2: Starte programmet i liggende modus

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
Svarte 31/08/2008 kl. 14:38
kilden bruker

stemmer
27

Oppsummering og integrering av alle innleggene, etter å ha testet det selv; sjekk oppdatering for 4.x, 5.x nedenfor.

Som på 3,2 du ikke kan endre retningen på et program som kjører fra kode.

Men du kan starte et program med en fast orientering, men gjør så dette er ikke enkelt.

Prøv med denne oppskriften:

  1. sette orientering til UISupportedInterfaceOrientationsi Info.plistfilen
  2. i vinduet definere en 480x320 "base view controller". Annenhver visningen vil bli lagt til som en subview til sitt syn.
  3. i alle vise kontrollerne satt opp shouldAutorotateToInterfaceOrientation:metoden (for å returnere den samme verdien du definert i plist, selvfølgelig)
  4. i alle vise kontrollerne satt en bakgrunn visning med

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

    i viewDidLoadmetoden.

Oppdatering (iOS 4.x, 5.x) : Apple iOS App Programming Guide har en "Lansering i landskapsmodus" avsnitt i "Advanced App Tricks" kapittel.

referanser:

Svarte 07/05/2010 kl. 11:02
kilden bruker

stemmer
7

Først jeg satt i Info.plist

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

så jeg satte inn denne koden i 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)]; 

Denne måten jeg kan jobbe på visningen i Interface Builder i liggende modus.

Svarte 20/11/2009 kl. 20:58
kilden bruker

stemmer
6

sasb og michaelpryor svar ser ut til å være riktig, men hvis det ikke fungerer for deg, kan du prøve dette alternativet:

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

Eller denne:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Eller denne:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

Du kan også ha å ringe window makeKeyAndVisible;først.

Noen linker: Utvikling i liggende modus , iPhone SDK: Hvordan tvinge liggende modus?

@Robert: henvises til iPhone SDK, NDA, og Stack Overflow .

Svarte 31/08/2008 kl. 15:01
kilden bruker

stemmer
5

Jeg er overrasket over at ingen har kommet opp med dette svaret ennå:

I alle mine tester når en forkaster en modal viser styreenhet moder vis kontrollerens foretrukne orientering angitt i shouldAutorotateToInterfaceOrientationæret selv når en del av en UINavigationController. Så løsningen på dette er enkel:

Lag en dummy UIViewController med en UIImageView for en bakgrunn. Sett bildet til default.png bildet appen din bruker ved oppstart.

Når viewWillAppearblir kalt inn root syn kontrolleren, bare presentere dummy visningen kontrolleren uten animasjon.

da viewDidAppearblir kalt inn din dummy syn kontrolleren, avvise utsikten kontroller med en fin cross oppløse animasjon.

Ikke bare gjør dette arbeidet, men det ser bra ut! BTW, bare for avklaring jeg gjøre roten visningen kontrolleren viewWillAppearsom dette:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
Svarte 27/11/2010 kl. 07:38
kilden bruker

stemmer
4

Den nyeste iPhone OS Programming Guide har en full del på dette, med eksempelkode. Jeg er sikker på at dette er et nytt tillegg, så kanskje du gikk glipp av det. Det forklarer alle de forhold du har til å overholde; i utgangspunktet...

  • angir Info.plist egenskaper (denne endrer posisjonen av statuslinjen, men ikke visningen)
  • rotere visningen manuelt rundt midten, på enten UIViewController viewDidLoad: metode eller applicationDidFinishLaunching: metode eller implementere automatisk rotasjon ( "Autoresizing atferd", side 124)

Se etter "Lansering i landskapsmodus", side 102.

Svarte 04/09/2008 kl. 21:57
kilden bruker

stemmer
3

Se dette svaret: Liggende modus for iPhone eller iPad

  1. legge til orientering til Plist
  2. shouldAutorotateToInterfaceOrientation = JA i alle filer

Selv om du bruker blandet modus, kan du bli bedre med

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Svarte 06/03/2011 kl. 07:56
kilden bruker

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