了解convertPoint:toView:

我不太明白的方法convertPoint:toView:

在苹果的文档中写道

convertPoint:toView:

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

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

但是,从一个到另一个的转换实际上是什么意思呢?

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

如果是后者,为什么有这样一种方法,当我们可以简单地将a的contentOffset的值赋给b的时候呢?

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

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

每个UIView都有自己的坐标系统。 所以如果你有一个包含另一个UIView_2的UIView_1,他们都有一个点(10,10)。

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

示例:view1包含view2。 view2的左上angular位于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]; 

所以现在pointInView1Coords应该在view1坐标系中是{30,30}。 现在这个例子只是简单的math,但是有各种各样的东西促成了转换。 想到变换和缩放。

阅读关于UIView框架,边界和中心。 他们都是相关的,他们处理坐标系的观点。 它令人困惑,直到你开始与他们做东西。 记住这个框架和中心是在父母的坐标系中。 界限在视图的坐标系中。

约翰