Лучший и самый простой способ сделать это - использовать convertPoint:toView
или convertRect:toView
на UIWindow
. Чтобы сделать это правильно, вам нужно предоставить представление, окно которого совпадает с окном представления, координаты которого вы пытаетесь преобразовать.
Для вашего вопроса вам нужно знать происхождение вида относительно его расположения в окне. К счастью, вам не нужно знать окно, чтобы получить это. Согласно документации UIView
convert:to
методов.
Вид, в точку которого система координат должна быть преобразована. Если view равен nil, этот метод вместо этого преобразует в базовые координаты окна. В противном случае и представление, и получатель должны принадлежать одному и тому же объекту UIWindow.
Это означает, что вы можете просто поставить nil
для достижения того, что вам нужно!
В Свифте:
let pointInWindow = yourView.convert(.zero, to: nil)
В Objective-C:
CGPoint pointInWindow = [yourView convertPoint:CGPointZero toView:nil];