我正在尝试了解这些方法的功能。你能给我提供一个简单的用例来理解它们的语义吗?
以文档为例,convertPoint:fromView:
方法描述如下:
Converts a point from the coordinate system of a given view to that of the receiver.
坐标系是什么意思? 接收者呢?
例如,像下面这样使用 convertPoint:fromView:
是否有意义?
CGPoint p = [view1 convertPoint:view1.center fromView:view1];
使用 NSLog 实用程序,我已验证 p
值与 view1
的中心一致。
提前谢谢你。
编辑:对于那些感兴趣的人,我创建了一个简单的代码片段来理解这些方法。
UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 150, 200)];
view1.backgroundColor = [UIColor redColor];
NSLog(@"view1 frame: %@", NSStringFromCGRect(view1.frame));
NSLog(@"view1 center: %@", NSStringFromCGPoint(view1.center));
CGPoint originInWindowCoordinates = [self.window convertPoint:view1.bounds.origin fromView:view1];
NSLog(@"convertPoint:fromView: %@", NSStringFromCGPoint(originInWindowCoordinates));
CGPoint originInView1Coordinates = [self.window convertPoint:view1.frame.origin toView:view1];
NSLog(@"convertPoint:toView: %@", NSStringFromCGPoint(originInView1Coordinates));
在这两种情况下,self.window
都是接收者。但有一点不同。在第一种情况下,convertPoint
参数以 view1
坐标表示。输出如下:
convertPoint:fromView: {100, 100}
相反,在第二个中,convertPoint
以 super View (self.window
) 坐标表示。输出如下:
convertPoint:toView: {0, 0}
最佳答案
每个 View 都有自己的坐标系 - 原点为 0,0 以及宽度和高度。这在 View 的 bounds
矩形中进行了描述。但是, View 的 frame
原点位于其父 View 的边界矩形内的点。
View 层次结构的最外层 View 的原点为 0,0,对应于 iOS 中屏幕的左上角。
如果您在 20,30 处向该 View 添加一个 subview ,则 subview 中 0,0 处的点对应于父 View 中 20,30 处的点。这种转换就是那些方法所做的。
您上面的示例毫无意义(没有双关语意),因为它将一个点从 View 转换为自身,所以什么也不会发生。您通常会发现某个 View 与其父 View 相关的位置 - 以测试 View 是否移出屏幕,例如:
CGPoint originInSuperview = [superview convertPoint:CGPointZero fromView:subview];
“接收者”是接收消息(方法也称为消息)的对象的标准 objective-c 术语,因此在我的示例中,接收者是 superview
。
关于ios - 了解 convertRect :toView:, convertRect :FromView:, convertPoint:toView: 和 convertPoint:fromView: 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8465659/