了解convertPoint:toView:

时间:2013-02-27 10:39:46

标签: ios cocoa-touch uiview geometry

我不太了解方法convertPoint:toView:

在Apple的文档中写道

  

convertPoint:toView:

     

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

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view

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

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

如果是后者,为什么我们可以简单地将一个contentOffset的值分配给b?

CGPoint a = [a contentOffset];
[b setContentOffset:a];

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

1 个答案:

答案 0 :(得分:118)

每个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];

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

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

约翰