2010-05-25 6 views
5

Ejemplo: Tengo un CGPoint en la ventana de coordenadas:Cómo convertir coordenadas de ventana en relación con una vista específica?

CGPoint windowPoint = CGPointMake(220.0f, 400.0f); 

No es aView que tiene una supervista en un supervista en un supervista. En algún lugar profundo de la jerarquía de vistas, probablemente incluso se haya transformado algunas veces.

Cuando obtiene un UITouch, puede solicitarlo -locationInView: y devolverá las coordenadas relativas a esa vista.

Necesito casi lo mismo. ¿Hay alguna manera fácil de lograr eso?

Respuesta

11

he encontrado una solución muy fácil:

[self.aView convertPoint:windowPoint fromView:self.window]; 
+0

Hay varias rutinas de conversión como que uno proporcionado por UIView. Todos están descritos en la guía de referencia de la clase UIView. http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/convertPoint:fromView: – progrmr

+0

Truco útil si necesita hacerlo esto para un marco rect, por ejemplo para animación, es [sourceView convertRect: targetView.bounds fromView: targetView]; no use targetView.frame o agregará su origen dos veces. – Hafthor

+0

Puede usar nil en lugar de self.window, en este caso el método se convierte en base a las coordenadas de la ventana – mt81

0

Tal vez usted podría recorrer el árbol supervista, la perforación hasta subvistas por etiqueta, y añadir o restar frame.origin los valores de la subvista para llegar a un windowPoint traducida en relación con el interés de frame.origin vista de paso.

Cuestiones relacionadas