UIView
の位置は、明らかにview.center
またはview.frame
などによって決定できますが、これは、即時のスーパービューに関連するUIView
の位置のみを返します。
320x480座標系全体でUIView
の位置を決定する必要があります。たとえば、UIView
がUITableViewCell
にある場合、ウィンドウ内の位置は、スーパービューに関係なく劇的に変化する可能性があります。
これが可能な場合、どのように考えますか?
乾杯:)
それは簡単です:
[aView convertPoint:localPosition toView:nil];
...ローカル座標空間のポイントをウィンドウ座標に変換します。このメソッドを使用して、次のようにウィンドウ空間でビューのOriginを計算できます。
[aView.superview convertPoint:aView.frame.Origin toView:nil];
2014 Edit: Matt__Cのコメントの人気を見ると、座標が...
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)
}
}
@Mohsenasmによる回答と、Swiftに採用された@Chigoからのコメントの組み合わせを以下に示します。
extension UIView {
var globalFrame: CGRect? {
let rootView = UIApplication.shared.keyWindow?.rootViewController?.view
return self.superview?.convert(self.frame, to: rootView)
}
}