75

このトピックに関するSOの質問を1ダース見ましたが、どれもうまくいきませんでした。多分これは私を正しい道に戻すのに役立つでしょう.

この設定を想像してください:

ここに画像の説明を入力

centerUIView に対する UIButton の座標を取得したいと考えています。

つまり、UITableViewCell 内の UIButton の中心は 215、80 である可能性がありますが、UIView と比較すると、260、165 のようになるはずです。2 つの間の変換方法を教えてください。

これが私が試したことです:

[[self.view superview] convertPoint:button.center fromView:button];  // fail
[button convertPoint:button.center toView:self.view];  // fail
[button convertPoint:button.center toView:nil];  // fail
[button convertPoint:button.center toView:[[UIApplication sharedApplication] keyWindow]];  // fail

ボタンのすべてのスーパービューをループして x 座標と y 座標を合計するという難しい方法で行うこともできますが、それはやり過ぎだと思います。必要なのは、covertPoint 設定の適切な組み合わせを見つけることだけです。右?

4

5 に答える 5

140

button.centerそのスーパービューの座標系内で指定された中心であるため、次のように動作すると仮定します。

CGPoint p = [button.superview convertPoint:button.center toView:self.view]

または、独自の座標系でボタンの中心を計算し、それを使用します。

CGPoint buttonCenter = CGPointMake(button.bounds.origin.x + button.bounds.size.width/2,
                                   button.bounds.origin.y + button.bounds.size.height/2);
CGPoint p = [button convertPoint:buttonCenter toView:self.view];

スイフト 4+

let p = button.superview!.convert(button.center, to: self.view)

// or

let buttonCenter = CGPoint(x: button.bounds.midX, y: button.bounds.midY)
let p = button.convert(buttonCenter, to: self.view)
于 2013-04-08T15:45:33.143 に答える
18

Swift 5.2 スーパービューではなく、ボタン

から呼び出す必要があります。convert私の場合、幅のデータが必要だったので、中心点だけでなく境界を変換しました。以下のコードは私のために働きます:

let buttonAbsoluteFrame = button.convert(button.bounds, to: self.view)
于 2018-02-26T21:24:02.453 に答える
14

マーティンの答えは正しいです。Swift を使用する開発者は、以下を使用して、画面に対するオブジェクト (ボタン、ビューなど) の位置を取得できます。

var p = obj.convertPoint(obj.center, toView: self.view)

println(p.x)  // this prints the x coordinate of 'obj' relative to the screen
println(p.y)  // this prints the y coordinate of 'obj' relative to the screen
于 2014-11-19T07:01:22.437 に答える