2009-04-10 8 views
6

Verwenden Sie die Informationen hier: iPhone Landscape-Only Utility-Template Application Ich bin in der Lage zu starten, verwenden und pflegen Sie meine Ansicht als nur Landschaft. Ich bin jedoch verwirrt über die Achse.iPhone Landschaft-nur App Ansicht Achse Verwirrung

Die absolute Achse verhält sich wie erwartet, dh (0,0) ist die obere linke, (240,0) ist die obere Mitte, (0,320) ist die untere linke Ecke, etc. Allerdings, wenn ich es versuche Berechnungen, die sich auf die Ansicht beziehen, auf die ich mich beziehe, finde ich, dass x, y so orientiert sein müssen, als ob das Porträt oben links der Ursprung wäre. So etwas in der Mitte-Punkt in meiner Ansicht-Controller zeichnen ich tun muss:

CGPoint center = CGPointMake(self.view.center.y, self.view.center.x); 

ich das annehmen aufgrund der Tatsache, dass die UIView von meinem Controller referenziert self.view schenkt es Werte in Bezug auf es umschließt Frame, also das Fenster mit dem Achsenursprung links oben im Portrait-Modus.

Gibt es eine einfache Möglichkeit, dies zu erklären, die ich vermisse?

Die Dokumentation legt nahe, dass die Transformationseigenschaft genau das ist, wonach ich suche, aber ich erlebe hier weitere Verwirrung. Es gibt drei wesentliche Eigenschaften beteiligt: ​​

  • Rahmen
  • Grenzen
  • Zentrum

Wenn ich dies tue in viewDidLoad:

// calculate new center point 
CGFloat x = self.view.bounds.size.width/2.0; 
CGFloat y = self.view.bounds.size.height/2.0; 
CGPoint center = CGPointMake(y, x); 

// set the new center point 
self.view.center = center; 

// Rotate the view 90 degrees counter clockwise around the new center point. 
CGAffineTransform transform = self.view.transform; 
transform = CGAffineTransformRotate(transform, -(M_PI/2.0)); 
self.view.transform = transform; 

Nun zu der Referenz docs nach, wenn Die Transformation ist nicht auf die Identitätstransformation eingestellt. self.view.frame ist nicht definiert. Also sollte ich mit Grenzen arbeiten und zentrieren.

self.view.center ist jetzt korrekt, weil ich es so eingestellt habe, wie ich es wollte. self.view.bounds erscheint unverändert. self.view.frame scheint genau zu sein, was ich will, aber wie oben erwähnt, behauptet die Referenz, dass es ungültig ist.

So, während ich bekommen kann, was ich glaube, dass die richtigen Zahlen sein, ich fürchte, ich bin mit Blick auf etwas kritisch, die später mühsam werden wird.

Danke.

Antwort

2

Bei Quarz 2D hat das Koordinatensystem seinen Ursprung (0,0) in der unteren linken Ecke der Grafik, nicht in der oberen linken Ecke. Vielleicht fehlt dir das?

See: http://developer.apple.com/documentation/graphicsimaging/Conceptual/drawingwithquartz2d/dq_overview/dq_overview.html#//apple_ref/doc/uid/TP30001066-CH202-CJBBAEEC

+0

Vielen Dank für die Antwort, aber nach dem iPhone Application Developer Handbuch Abschnitt Ansicht Geometrie: http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide /WindowsandViews/WindowsandViews.html#//apple_ref/doc/uid/TP40007072-CH8-SW5 was Sie angeben, ist nicht das Problem –

+1

Und wenn Sie lesen, heißt es: "Obwohl das von Quartz verwendete Koordinatensystem nicht die obere linke verwendet Ecke als Ausgangspunkt, für viele Quartz-Aufrufe ist das kein Problem. [...] Die einzige Zeit, die Sie brauchen, um diese verschiedenen Koordinatensysteme zu betrachten, ist, wenn Sie die Zeichenumgebung selbst mit Quartz einrichten. " Wenn Sie manuell Sachen mit Quartz auf den Bildschirm zeichnen, wäre das die Antwort :) –