理解convertPoint:toView:方法

46
我不太理解convertPoint:toView:方法的用法。
在苹果的文档中,写着:

convertPoint:toView:

Converts a point from the receiver’s coordinate system to that of the specified view.

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view
但是将一个点从一个边界转换到另一个边界实际上意味着什么呢?它意味着两个边界中的点具有不同的值还是不同的单位?如果是后者,为什么会有这样一种方法,当我们可以简单地将a的contentOffset赋值给b时?
CGPoint a = [a contentOffset];
[b setContentOffset:a];

convertPoint:toView:与简单分配contentOffset有何不同?或者我完全误解了整个概念?转换点实际上是做什么的?应该在什么时候使用这种方法?


我相信它与 view.transform 有关。 - Cyrille
@Cyrille,view.transform是做什么用的?将center属性分配给另一个视图? - Help - I need somebody's help
https://dev59.com/w3I95IYBdhLWcg3w8iz1 - Rajneesh071
@Rajneesh071 谢谢你的链接,但我还是不太明白... - Help - I need somebody's help
@cartogram transform 属性允许您缩放、平移、旋转任何视图(使用硬件加速,顺便说一下)。例如,它在内部用于处理应用程序的自动旋转:即使您将 iPad 横向保持,主 UIWindow 仍然是纵向的,并且会应用一个 旋转90°+平移到中心 的变换。纵向和横向坐标之间的转换是使用 convertPoint:fromWindow: 函数完成的,如果我没记错的话。 - Cyrille
1个回答

125
每个UIView都有自己的坐标系。因此,如果您有一个包含另一个UIView_2的UIView_1,则它们都在其中具有点(10,10)。
convertPoint:toView:允许开发人员将一个视图中的点转换为另一个视图的坐标系。
例如: view1包含view2。 view2的左上角位于view1点(10,10),或者更好地说,view2.frame.origin = {10,10}。该{10,10}是基于view1坐标系的。到目前为止还不错。
用户在view2内部的{20,20}点处触摸view2。现在这些坐标在view2坐标系中。您现在可以使用covertPoint:toView:将{20,20}转换为view1的坐标系。touchPoint = {20,20}
CGPoint pointInView1Coords = [view2 convertPoint:touchPoint toView:view1];

现在,pointInView1Coords 在 view1 坐标系中应该是 {30,30}。在这个例子中,这只是简单的数学计算,但有许多因素会影响转换。变换和缩放是其中之一。
阅读有关 UIView frame、bounds 和 center 的内容。它们都与视图的坐标系统有关。在开始使用它们之前可能会感到困惑。请记住,frame 和 center 是相对于父视图的坐标系的。而 bounds 是相对于视图自身的坐标系。
约翰

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接