2009-04-10 5 views
6

Utilizando la información aquí: iPhone Landscape-Only Utility-Template Application Puedo iniciar, usar y mantener mi vista solo como paisaje. Sin embargo, estoy confundido acerca del eje.Síntesis de eje de vista de aplicación solo para iPhone confusión

El eje absoluto se comporta como se esperaba, lo que significa que (0,0) es la parte superior izquierda, (240,0) es la parte superior central, (0,320) la esquina inferior izquierda, etc. Sin embargo, cuando intento hacerlo cálculos relacionados con la vista en la que estoy dibujando. Creo que x, y se orientan como si el retrato de arriba a la izquierda fuera el origen. Así que para dibujar algo en el punto central en mi controlador de vista que tengo que hacer:

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

que supongo que debido al hecho de que el UIView referenciado por mis controladores self.view está dando Es valores relativos a Es encerrando marco, es decir, la ventana que tiene su origen de eje en la parte superior izquierda en modo vertical.

¿Hay alguna manera simple de dar cuenta de esto que me falta?

La documentación sugiere que la propiedad de transformación es exactamente lo que estoy buscando, sin embargo, aquí experimento más confusión. Hay 3 propiedades esenciales implicados:

  • marco
  • límites
  • centro

Si hago esto en 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; 

Ahora bien, según los documentos de referencia, si La transformación no está configurada para la transformación de identidad self.view.frame no está definida. Entonces debería trabajar con límites y centrarme.

self.view.center es correcto ahora, porque lo configuré como yo quería. self.view.bounds aparece sin cambios. self.view.frame parece ser exactamente lo que quiero que sea, pero como se indicó anteriormente, la referencia afirma que no es válido.

Así que mientras puedo obtener lo que creo que son los números correctos, me temo que estoy pasando por alto algo crítico que se convertirá en un problema más adelante.

Gracias.

Respuesta

2

Con Cuarzo 2D, el sistema de coordenadas tiene su origen (0,0) en la esquina inferior izquierda del gráfico, no en la esquina superior izquierda. Tal vez eso es lo que te estás perdiendo.

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

+0

Gracias por la respuesta, pero de acuerdo a la sección Guía del desarrollador de aplicaciones iPhone en la geometría de la vista: http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide /WindowsandViews/WindowsandViews.html#//apple_ref/doc/uid/TP40007072-CH8-SW5 lo que indica que no es el problema –

+1

Y si continúa leyendo, dice "Aunque el sistema de coordenadas utilizado por Quartz no usa la parte superior izquierda la esquina como punto de origen, para muchas llamadas de Cuarzo esto no es un problema. [...] El único momento en que debes considerar estos diferentes sistemas de coordenadas es cuando configuras el entorno de dibujo usando Quartz ". Si estás dibujando cosas manualmente en la pantalla usando Quartz, esa sería la respuesta :) –

Cuestiones relacionadas