ios - 了解 convertRect :toView:, convertRect :FromView:, convertPoint:toView: 和 convertPoint:fromView: 方法

标签 ios layout uiview

我正在尝试了解这些方法的功能。你能给我提供一个简单的用例来理解它们的语义吗?

以文档为例,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/

相关文章:

ios - 为什么在一个新的 react-native 项目之后会有很多弃用警告?

java - 如何使用布局而不是低级坐标在 Java 中进行打印?

java - gwt 滚动 Pane 从其他组件获取大小

ios - 让 UIView 的一半超出屏幕

ios - 从 Storyboard 中实例化几个可拖动的图 block - 附上测试代码和屏幕截图

ios - swift 3 : Error in copying file with FileManager

ios - UIAlertView 的大小

ios - NSInvalidArgumentException',原因: 'Unable to parse the format string "userName like %@ password like % @"'

javascript - HTML-CSS 布局使整个网站居中并卡住菜单

ios - 如何在另一个 View 上方显示 PickerView