如何在另一个视图中获取视图的框架?

Cra*_*Dev 38 xcode objective-c frame uiimageview ios

UIImageViewself.view(主视图)中有一个,里面有一个UIButton.我想知道什么是的框架UIButtonself.view没有UIImageView.

ber*_*ium 92

我想你正在寻找这种方法

- convertRect:toView:

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

// Objective-C
CGRect frame = [imageView convertRect:button.frame toView:self.view];
Run Code Online (Sandbox Code Playgroud)


jba*_*100 20

有四种UIView方法可以帮助你,转换CGPointsCGRects从一个UIView坐标参考到另一个:

– convertPoint:toView:
– convertPoint:fromView:
– convertRect:toView:
– convertRect:fromView:
Run Code Online (Sandbox Code Playgroud)

所以你可以试试

CGRect f = [imageView convertRect:button.frame toView:self.view];
Run Code Online (Sandbox Code Playgroud)

要么

CGRect f = [self.view convertRect:button.frame fromView:imageView];
Run Code Online (Sandbox Code Playgroud)


Der*_*ike 8

斯威夫特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)
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以引用myButton.superview而不是myImageView转换帧时.


以下是转换CGPoint或转换的更多选项CGRect.

self.view.convert(point: CGPoint, from: UICoordinateSpace)
self.view.convert(point: CGPoint, from: UIView)             
self.view.convert(rect: CGRect, from: UICoordinateSpace)
self.view.convert(rect: CGRect, from: UIView)

self.view.convert(point: CGPoint, to: UICoordinateSpace)
self.view.convert(point: CGPoint, to: UIView)
self.view.convert(rect: CGRect, to: UICoordinateSpace)
self.view.convert(rect: CGRect, to: UIView)
Run Code Online (Sandbox Code Playgroud)

有关转换a 或的更多信息,请参阅Apple Developer Docs.CGPointCGRect