问题描述
我不太明白方法
如果是后者,为什么有这样一种方法,我们可以简单地分配a的值 contentOffset 到b's?
CGPoint a = [a contentOffset];
[b setContentOffset:a];
convertPoint:toView:与<简单地分配 contentOffset ?还是我误解了整个概念? 转换点实际上有什么作用?什么时候应该使用这种方法?每一个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];
所以现在pointInView1Coords应该在view1坐标系中是{30,30}。现在这个例子只是简单的数学,但是有各种各样的东西促成了转换。想到变换和缩放。
阅读UIView框架,边界和中心。他们都是相关的,他们处理坐标系的观点。它令人困惑,直到你开始与他们做东西。请记住,此框架和中心位于父级坐标系中。边界位于视图的坐标系中。
约翰
I do not quite understand the method convertPoint:toView:.
In Apple's documentation it is written that
But what does converting a point from one to the other actually mean?
Does it imply that the points in both bounds have different units? Or just different values?
If it is the latter, why is there such a method when we can simply assign the value of a's contentOffset to b's ?
CGPoint a = [a contentOffset]; [b setContentOffset:a];
How is convertPoint:toView: different from simply assigning contentOffset? Or did I misunderstand the entire concept? What does converting points actually do? When should this method be used?
Every UIView has its own coordinates system. So if you have a UIView_1 that contains another UIView_2, they both have a point (10,10) within them.
convertPoint:toView: allows the developer to take a point in one view and convert the point to another view coordinate system.
Example: view1 contains view2. The top left corner of view2 is located at view1 point (10,10), or better to say view2.frame.orgin = {10,10}. That {10,10} is based in the view1 coordinate system. So far so good.
The user touches the view2 at point {20,20} inside the view2. Now those coordinates are in the view2 coordinate system. You can now use covertPoint:toView: to convert {20,20} into the coordinate system of view1. touchPoint = {20,20}
CGPoint pointInView1Coords = [view2 convertPoint:touchPoint toView:view1];
So now pointInView1Coords should be {30,30} in the view1 coordinate systems. Now that was just simple math on this example, but there are all sorts of things that contribute to the conversion. Transforms and scaling come to mind.
Read about UIView frame, bounds, and center. They are all related and they deal with coordinate systems for a view. Its confusing until you start doing stuff with them. Remember this frame and center are in the parent's coordinate system. Bounds is in the view's coordinate system.
John
这篇关于了解convertPoint:toView:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!