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