UIView在其超视图的框架或边界属性中包含一个原点。假设我想做一些相对于UIWindow抓取UIView的起源的东西。我是否必须逐步进行层次结构以进行此计算,或者是否有更简单,更直接的方法?
答案 0 :(得分:5)
我猜你在找这个方法
答案 1 :(得分:2)
要找出视图aView
在应用程序窗口中的位置,请尝试
[aView convertRect:aView.frame toView:[UIWindow screen]]
答案 2 :(得分:0)
执行此操作的最佳和最简单方法是在convertRect:toView
上使用UIWindow
或UIView
。为了正确执行此操作,您需要提供一个视图,其窗口与您尝试转换其坐标的视图窗口相匹配。
对于您的问题,您需要知道视图在窗口中的位置。谢天谢地,你不需要知道窗口才能得到这个。根据{{1}} convert:to
方法的文档。
要转换其坐标系点的视图。如果view为nil,则此方法将转换为窗口基坐标。否则,视图和接收者都必须属于同一个UIWindow对象。
这意味着您只需提供nil
即可实现所需目标!
在斯威夫特:
let pointInWindow = yourView.convert(.zero, to: nil)
在Objective-C中:
CGPoint pointInWindow = [yourView convertPoint:CGPointZero toView:nil];