问题
The position of a UIView
can obviously be determined by view.center
or view.frame
etc. but this only returns the position of the UIView
in relation to it\'s immediate superview.
I need to determine the position of the UIView
in the entire 320x480 co-ordinate system. For example, if the UIView
is in a UITableViewCell
it\'s position within the window could change dramatically irregardless of the superview.
Any ideas if and how this is possible?
Cheers :)
回答1:
That's an easy one:
[aView convertPoint:localPosition toView:nil];
... converts a point in local coordinate space to window coordinates. You can use this method to calculate a view's origin in window space like this:
[aView.superview convertPoint:aView.frame.origin toView:nil];
2014 Edit: Looking at the popularity of Matt__C's comment it seems reasonable to point out that the coordinates...
- don't change when rotating the device.
- always have their origin in the top left corner of the unrotated screen.
- are window coordinates: The coordinate system ist defined by the bounds of the window. The screen's and device coordinate systems are different and should not be mixed up with window coordinates.
回答2:
Swift 4:
let globalPoint = aView.superview?.convert(aView.frame.origin, to: nil)
回答3:
In Swift:
let globalPoint = aView.superview?.convertPoint(aView.frame.origin, toView: nil)
回答4:
Swift 3, with extension:
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:
Here is a combination of the answer by @Mohsenasm and a comment from @Chigo adopted to Swift
extension UIView {
var globalFrame: CGRect? {
let rootView = UIApplication.shared.keyWindow?.rootViewController?.view
return self.superview?.convert(self.frame, to: rootView)
}
}
来源:https://stackoverflow.com/questions/1465394/iphone-get-position-of-uiview-within-entire-uiwindow