2009-09-23 5 views
176

Положение в UIView, очевидно, может быть определено view.center или view.frame и т.д., но это только возвращает позицию UIView по отношению к его непосредственным SuperView.iPhone - Получить Положение UIView в целом UIWindow

Мне нужно определить положение UIView во всей системе координат 320x480. Например, если UIView находится в UITableViewCell, его положение внутри окна может резко измениться независимо от надзора.

Любые идеи, если и как это возможно?

Приветствия :)

ответ

300

Это легко один:

[aView convertPoint:localPosition toView:nil]; 

... преобразует точку в локальной системе координат пространства к координатам окна. Вы можете использовать этот метод для вычисления координат представлен вид в пространстве окна, как это:

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

2014 Edit: Глядя на популярность комментарий Matt__C в это представляется целесообразным отметить, что координаты ...

  1. не меняются при повороте устройства.
  2. всегда имеют начало координат в левом верхнем углу экрана.
  3. : Координаты окна: Система координат ist определяется границами окна. Системы координат экрана и устройства различны и не должны смешиваться с координатами окна.
+0

удивительным :) Я думал, что это должно быть простым, но у меня было ощущение, что яблоко не будет так легко ... хорошо. спасибо –

+0

Я добавил другой вопрос - он работал для меня в симуляторе, но не на реальном устройстве :( –

+0

вот еще вопрос http://stackoverflow.com/q/6013766/531527 –

22

В Swift:

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

Swift 4:

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

Swift 3, с расширением:

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) 
    } 
}