IPhone - Получить позицию UIView в пределах всего UIWindow

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

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

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

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

Ответ 1

Это легкий:

[aView convertPoint:localPosition toView:nil];

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

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

2014 Редактировать: Глядя на популярность комментария Matt__C, кажется разумным указать, что координаты...

  • не меняются при повороте устройства.
  • всегда имеют начало координат в верхнем левом углу экрана без ссылки.
  • координаты окна: система координат определяется границами окна. Системы координат экрана и устройства различны и не должны смешиваться с координатами окна.

Ответ 2

Swift 4:

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

Ответ 3

В Swift:

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

Ответ 4

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

Ответ 5

Вот комбинация ответа @Mohsenasm и комментария от @Chigo, принятого для Swift

extension UIView {
    var globalFrame: CGRect? {
        let rootView = UIApplication.shared.keyWindow?.rootViewController?.view
        return self.superview?.convert(self.frame, to: rootView)
    }
}