In meiner iPhone OS-Anwendung möchte (muss) ich auf Änderungen in der Geräteausrichtung achten, um bestimmte Teile des Bildschirms neu anzuordnen. Der Ansatz, den ich verwendete, war, CGRect frame = [UIScreen mainScreen].applicationFrame
zu verwenden, um die Bildschirmgröße zu erhalten, und von dort die Größe und/oder Positionierung anderer Kontrollen zu berechnen (ich versuchte auch self.view.frame
)."Falsche" Frame/Fenstergröße nach Neuausrichtung in iPhone
Alle Tests wurden bisher im Portrait-Modus durchgeführt, sodass ich mich auf die Programmierung der Hauptfunktionen konzentrieren konnte und später einige Anpassungen für Landscape vornehmen konnte. Und hier tritt das Problem auf: In -(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
habe ich etwas Logging hinzugefügt, um die Größen zu überprüfen, bevor ich fortfahre, aber anscheinend sind die Werte für Breite und Höhe "falsch" (ich sage "falsch", weil auf den ersten Blick die Werte für mich keinen Sinn ergeben)).
Hier ist der Ausgang einiger Protokollierung:
- Rotation: Landschaft [w = 300,000000, h = 480,000000]
- Rotation: Portrait [w = 320,000000, h = 460,000000]
Die Werte für "w" und "h" in Landscape scheinen mir invertiert zu sein - ich habe erwartet, dass w = 480 und h = 300 sind.
Was mache ich falsch? Der Code, mit dem ich debuggte, ist unten.
-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
CGRect frame = [UIScreen mainScreen].applicationFrame;
CGSize size = frame.size;
NSLog(@"%@", [NSString stringWithFormat:@"Rotation: %s [w=%f, h=%f]",
UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? "Portrait" : "Landscape",
size.width, size.height]);
}
hhmm ... wenn ich 'self.view.bounds 'benutze (wenn man bedenkt, dass" self.view "die Hauptansicht ist, wo andere Unteransichten hinzugefügt werden), bekomme ich die erwarteten Werte. Jetzt bekomme ich dieses Verhalten Ich erinnere mich an etwas, das sie in der Standford iPhone Dev Kurs in iTues U gesprochen haben, aber ich bin mir nicht sicher, ob es verwandt ist. Wie auch immer, ich möchte noch eine konkretere Meinung haben. –
Seltsamerweise funktioniert 'self.view.frame' auch gut, wenn Sie einen Navigationscontroller haben, aber wenn nicht, sieht es so aus, als müssten Sie' self.view.bounds' verwenden. – Rob