2009-09-23 10 views
176

全体UIWindow内のUIViewの位置を取得しますUIViewの位置は明らかにview.centerまたはview.frameなどによって決定することができるが、これは、それが直接のスーパーだとの関係でUIViewの位置を返します。iPhone -

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

これが可能かどうか、またこれはどのような考えですか?

乾杯:)

答えて

300

簡単なものです:

[aView convertPoint:localPosition toView:nil]; 

...ウィンドウ座標へのローカル座標空間内のポイントに変換します。あなたは、このようなウィンドウ空間でビューの原点を計算し、このメソッドを使用することができます。

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

2014編集

はMatt__Cさんのコメントの人気を見ると、その座標を指摘するのが妥当と思われる...

  1. デバイスを回転させても変更されません。
  2. は、常に回転していない画面の左上隅に原点を持ちます。
  3. です。ウィンドウ座標:座標系はウィンドウの境界で定義されていません。画面の座標系とデバイスの座標系は異なりますので、ウィンドウの座標と混同しないでください。スウィフトは
+0

素晴らしい:)私は、それが簡単でなければならないと思いましたしかし、私はリンゴがそれをあまり簡単に与えないと感じていた。ありがとう –

+0

私は別の質問を追加しました - それは実際のデバイスではなく、シミュレータで私のために働いた:( –

+0

ここで別の質問http://stackoverflow.com/q/6013766/531527 –

22

let globalPoint = aView.superview?.convertPoint(aView.frame.origin, toView: nil) 
19

スウィフト4

let globalPoint = aView.superview?.convert(aView.frame.origin, to: nil) 
8

拡張子を持つスウィフト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) 
    } 
}