2011-11-10 14 views

答えて

77

私はあなたを助けることができる4つのUIView方法は1からCGPointsCGRects変換、がありますが、この方法

– convertRect:toView:

// Swift 
let frame = imageView.convert(button.frame, to: self.view) 

// Objective-C 
CGRect frame = [imageView convertRect:button.frame toView:self.view]; 
2

これは何か?くぼみは本当にそれを通じthinkt、完全に間違っているかもしれない。theresの場合のp

CGRect frame = CGRectMake((self.view.frame.origin.x-imageview.frame.origin.x) +btn.frame.origin.x, 
          (self.view.frame.origin.y.imageview.frame.origin.y)+btn.frame.origin.y, 
          btn.frame.size.width, 
          btn.frame.size.height); 

は、私がどんな簡単な方法を知りません。

17

を探していると思いUIView別の参照座標:

– convertPoint:toView: 
– convertPoint:fromView: 
– convertRect:toView: 
– convertRect:fromView: 

試してみることができます

CGRect f = [imageView convertRect:button.frame toView:self.view]; 

または

CGRect f = [self.view convertRect:button.frame fromView:imageView]; 
7

スウィフト3

あなたはこれでビューの座標系にボタンのフレームに変換することができます:

self.view.convert(myButton.frame, from: myButton.superview)


ロジックをviewDidLayoutSubviewsに入れてください(viewDidLoadではなく)。ジオメトリ関連の操作は、サブビューが配置された後に実行する必要があります。そうしないと、正常に動作しない可能性があります。

class ViewController: UIViewController { 

    @IBOutlet weak var myImageView: UIImageView! 
    @IBOutlet weak var myButton: UIButton! 

    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 

     let buttonFrame = self.view.convert(myButton.frame, from: myButton.superview) 
    } 
} 

フレームを変換するときに、ちょうどmyButton.superviewの代わりmyImageViewを参照することができます。ここ


CGPointまたはCGRect変換するためのより多くのオプションです。

​​

CGPoint又はCGRectの変換の詳細についてはApple Developer Docsを参照。

関連する問題