iPhone: consigue la posición de UIView en toda la ventana de UI

La posición de una UIView puede ser determinada obviamente por view.center o view.frame etc., pero esto solo devuelve la posición de la UIView en relación con su superview inmediata.

Necesito determinar la posición de UIView en todo el sistema de coordenadas 320×480. Por ejemplo, si el UIView está en una UITableViewCell , su posición dentro de la ventana podría cambiar dramáticamente, independientemente de la supervista.

¿Alguna idea de si esto es posible?

Saludos 🙂

Eso es fácil:

 [aView convertPoint:localPosition toView:nil]; 

… convierte un punto en el espacio de coordenadas local en coordenadas de ventana. Puede usar este método para calcular el origen de una vista en un espacio de ventana como este:

 [aView.superview convertPoint:aView.frame.origin toView:nil]; 

2014 Edición: Viendo la popularidad del comentario de Matt__C, parece razonable señalar que las coordenadas …

  1. no cambie cuando gire el dispositivo.
  2. siempre tienen su origen en la esquina superior izquierda de la pantalla no girada.
  3. son coordenadas de ventana : el sistema de coordenadas está definido por los límites de la ventana. Los sistemas de coordenadas de la pantalla y del dispositivo son diferentes y no deben mezclarse con las coordenadas de la ventana.

En Swift:

 let globalPoint = aView.superview?.convertPoint(aView.frame.origin, toView: nil) 

Swift 4 :

 let globalPoint = aView.superview?.convert(aView.frame.origin, to: nil) 

Swift 3, con extensión:

 extension UIView{ var globalPoint :CGPoint? { return self.superview?.convert(self.frame.origin, to: nil) } var globalFrame :CGRect? { return self.superview?.convert(self.frame, to: nil) } }