46

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

在 Apple 的文档中写道

convertPoint:toView:

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

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

但是将一个点从一个点转换到另一个点实际上意味着什么?

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

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

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

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

4

1 回答 1

125

每个 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 的坐标系。接触点 = {20,20}

CGPoint pointInView1Coords = [view2 convertPoint:touchPoint toView:view1];

所以现在 pointInView1Coords 在 vi​​ew1 坐标系中应该是 {30,30}。现在这只是这个例子的简单数学,但是有各种各样的东西有助于转换。我想到了变换和缩放。

阅读有关 UIView 框架、边界和中心的信息。它们都是相关的,它们处理视图的坐标系。在您开始与他们一起做事之前,它会令人困惑。记住这个框架和中心在父坐标系中。边界在视图的坐标系中。

约翰

于 2013-02-27T14:31:30.940 回答