229

a の位置は明らかにorなどUIViewによって決定できますが、これは直接のスーパービューに関連するの位置のみを返します。view.centerview.frameUIView

UIView320x480 座標系全体での位置を決定する必要があります。たとえば、がウィンドウ内の位置UIViewにある場合UITableViewCell、スーパービューに関係なく劇的に変化する可能性があります。

これが可能かどうか、またどのように可能かについてのアイデアはありますか?

乾杯 :)

4

7 に答える 7

361

それは簡単です:

[aView convertPoint:localPosition toView:nil];

... ローカル座標空間のポイントをウィンドウ座標に変換します。このメソッドを使用して、ウィンドウ空間でのビューの原点を次のように計算できます。

[aView.superview convertPoint:aView.frame.origin toView:nil];

2014 編集: Matt__C のコメントの人気を見ると、座標が...

  1. デバイスを回転させても変化しません。
  2. 原点は常に回転していない画面の左上隅にあります。
  3. ウィンドウ座標です: 座標系は、ウィンドウの境界によって定義されます。画面とデバイスの座標系は異なるため、ウィンドウ座標と混同しないでください。
于 2009-09-23T11:32:34.590 に答える
44

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)
    }
}
于 2017-09-12T06:22:59.690 に答える
24

これは、@ Mohsenasmによる回答と、Swiftに採用された@ Ghigoからのコメントの組み合わせです

extension UIView {
    var globalFrame: CGRect? {
        let rootView = UIApplication.shared.keyWindow?.rootViewController?.view
        return self.superview?.convert(self.frame, to: rootView)
    }
}
于 2019-07-05T05:26:44.400 に答える