了解convertPoint:toView:

Hel*_*elp 42 geometry cocoa-touch uiview ios

我不太明白这个方法convertPoint:toView:.

在Apple的文档中写道

convertPoint:toView:

将点从接收器的坐标系转换为指定视图的点.

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view
Run Code Online (Sandbox Code Playgroud)

但是将一个点从一个点转换到另一个点究竟意味着什么?

这是否意味着两个边界中的点都有不同的单位?或者只是不同的价值?

如果是后者,为什么我们可以简单地将a的值赋给contentOffsetb?

CGPoint a = [a contentOffset];
[b setContentOffset:a];
Run Code Online (Sandbox Code Playgroud)

如何convertPoint:toView:从简单的分配不同contentOffset?还是我误解了整个概念?什么是转换点实际上做?应该何时使用此方法?

Joh*_*ohn 120

每个UIView都有自己的坐标系.因此,如果你有一个包含另一个UIView_2的UIView_1,它们都有一个点(10,10).

convertPoint:toView:允许开发人员在一个视图中获取一个点并将该点转换为另一个视图坐标系.

示例:view1包含view2.view2的左上角位于view1点(10,10),或者更好地说view2.frame.orgin = {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];
Run Code Online (Sandbox Code Playgroud)

所以现在viewInView1Coords在view1坐标系中应该是{30,30}.现在这只是这个例子的简单数学,但是有各种各样的事情有助于转换.想到变形和缩放.

阅读有关UIView框架,边界和中心的信息.它们都是相关的,它们处理视图的坐标系.直到你开始用它们做东西时才会感到困惑.请记住,此框架和中心位于父级坐标系中.边界位于视图的坐标系中.

约翰