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


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

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

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

Ура :)

4 182

4 ответа:

это легко:

[aView convertPoint:localPosition toView:nil];

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

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

2014 Edit: глядя на популярность комментария Мэтта__C, кажется разумным указать, что координаты...

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

Swift 4:

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

В Swift:

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

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