2011-11-10 46 views

回答

77

我猜你正在尋找這種方法

– convertRect:toView:

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

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

像這樣的東西?可能是完全錯誤的,dint真的認爲它通過; 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方法,它可以幫助你從一個UIView轉換CGPointsCGRects參考座標到另一個:

– 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轉換幀時。


以下是用於將CGPointCGRect更多選項。

​​

參見Apple Developer Docs更多關於轉換CGPointCGRect

相關問題