La position d'un UIView
peut évidemment être déterminée par view.center
ou view.frame
etc. mais cela ne retourne que la position de UIView
par rapport à sa superview immédiate.
Je dois déterminer la position du UIView
dans l’ensemble du système de coordonnées 320x480. Par exemple, si le UIView
se trouve dans un UITableViewCell
, sa position dans la fenêtre pourrait changer de façon spectaculaire, indépendamment de la vue d'ensemble.
Des idées si et comment cela est possible?
À votre santé :)
C'est facile:
[aView convertPoint:localPosition toView:nil];
... convertit un point de l'espace de coordonnées local en coordonnées de fenêtre. Vous pouvez utiliser cette méthode pour calculer l'origine d'une vue dans l'espace de la fenêtre comme ceci:
[aView.superview convertPoint:aView.frame.Origin toView:nil];
2014 Edit: En regardant la popularité du commentaire de Matt__C, il semble raisonnable de souligner que les coordonnées ...
Swift 4:
let globalPoint = aView.superview?.convert(aView.frame.Origin, to: nil)
En rapide:
let globalPoint = aView.superview?.convertPoint(aView.frame.Origin, toView: nil)
Swift 3, avec extension:
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)
}
}
Voici une combinaison de la réponse de @Mohsenasm et d'un commentaire de @Chigo adopté par Swift
extension UIView {
var globalFrame: CGRect? {
let rootView = UIApplication.shared.keyWindow?.rootViewController?.view
return self.superview?.convert(self.frame, to: rootView)
}
}