• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> 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.