> let convertToWindow = subview.convert(subview.frame, to: window)
Are you sure that’s correct? The documentation says “Converts a rectangle from the receiver’s coordinate system to that of another view.”
The receiver is
subview but the rectangle you are passing is the subview’s frame, which is in the coordinate system of its superview (`view`). This is the classic frame/bounds confusion.
I think these will do the right thing (the first one relies on knowing that
subview's superview, the other just uses the superview):
let convertToWindow = view.convert(subview.frame, to: window)
let convertToWindow = subview.superview.convert(subview.frame, to: window)
Thinking about it differently,
rootView is at the origin of the window, so will have no effect.
view is at 25,25 and
subview is at 25,25 within
view. So the origin of
window's coordinate system will be 50,50 and not 75,75 as your article (currently) states.
As an aside, I prefer to use the “from” rather than “to” versions. It helps me think in the coordinate system of where I’m converting *to*, rather than where I’m coming *from*. They are equivalent, but this way the message is sent to the view that the rect will be used with.
let convertToWindow = window.convert(subview.frame, from: view)
let convertToWindow = window.convert(subview.frame, from: subview.superview)
I *think* my examples are correct. Apologies if I got it wrong! ;-)