• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

iPhone Orientation wird nicht richtig ausgelesen

TheNman

Grahams Jubiläumsapfel
Registriert
28.06.08
Beiträge
104
Hallo,

ich habe folgendes Problem in meiner App. Da wir keinen Interface Builder mehr nutzen müssen wir logischerweise alle Elemente im Code erstellen und platzieren. Da wir auch noch zwischen Landscape und Portrait Modus unterscheiden wollen, habe ich folgende Struktur entwickelt:

Code:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
		if( ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) ){
			self.DetailButton.frame = CGRectMake(180,220,120,40);
			self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0,55,480,216)];
			self.Label = [[UITextView alloc] initWithFrame:CGRectMake(40,0,400,40)];
			self.Label2 = [[UITextView alloc] initWithFrame:CGRectMake(0,20,480,40)];
		}
		else if( ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) || ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) ){
			self.DetailButton.frame = CGRectMake(100,360,120,40);
			self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0,105,320,216)];
			self.Label = [[UITextView alloc] initWithFrame:CGRectMake(10,0,300,60)];
			self.Label2 = [[UITextView alloc] initWithFrame:CGRectMake(10,50,300,60)];
		}
           [...]
	}
    return self;
}

Wenn das im Simulator teste funktioniert es einwandfrei, jedoch auf dem iPhone wird keine der beinen Orientations festgestellt, also wird nichts angezeigt.

Hab ich irgendwas falsch gemacht? Wie überprüft ihr wie das iPhone gehalten wird?

Edit: Jetzt auch mit Code-Blöcken, tut mir Leid.
 
Zuletzt bearbeitet:
Packe deinen Code bitte erst in CODE-Blöcke, dann helfen wir dir weiter...

Gruss ppocket
 
1. Probier' es mal mit interfaceOrientation (Property des View-Controllers, also z.B. per self.interfaceOrientation darauf zugreifen), statt [UIDevice currentDevice].
2. Wie sehen Deine Accessor-Methoden für die Views (genauer: der Properties) aus? Du musst deine Views jeweils als Subview dem vom View-Controller verwalteten View hinzufügen! (und zum richtigen Zeitpunkt auch wieder entfernen.)
3. Kannst Du Dir die Abfrage auf eine Portrait-Orientierung sparen. Es wird immer eine der vier Orientierungen geliefert.

Btw. "DetailButton", "Label" und "Label2" sind falsch geschrieben :o – und Memory-Leaks fängst Du Dir hier...
Code:
self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0,55,480,216)]
(und ähnlichen Konstrukten) wohl auch noch ein, da Du (hoffentlich) pickerView retainst. Da gehört als Quick-Fix ein autorelease angehängt.


Gruss, Jörg
 
  • Like
Reaktionen: TheNman
Hallo,

vielen dank für deine Hilfe. Die self.interfaceOrientation macht genau das was ich wollte. Der Rest passt soweit, ich bekommen beim Testen keine Warnungen oder Fehler.