- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试了解这些方法的功能。你能给我提供一个简单的用例来理解它们的语义吗?
以文档为例,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/
我正在尝试了解这些方法的功能。你能给我提供一个简单的用例来理解它们的语义吗? 以文档为例,convertPoint:fromView:方法描述如下: Converts a point from the
我正在尝试将深层“ subview ”框架转换为上层“UIView”。我在此处附加 View 层次结构。 附上插图: 我试过了,但结果离屏幕很远: let rect = smallSubview.co
我想要相对于主窗口的坐标,因此我使用 convertRect:toView: 并将 nil 作为第二个参数: CGRect result = [self.view convertRect:addToL
在我的 viewController 中,我有这个带有自定义单元格的 tableView。在我的 cellForRow:atIndexPath: 方法中,我想根据我的 viewController 的
我有一堆水平的 UITableView 放在 UIViewController1 中。我想找到被点击的 UITableViewCell 的位置,我想根据 UIViewController1 获得位置。
从主视图 Controller 的 ViewDidAppear UIView* parent = [[UIView alloc] initWithFrame:CGRectMake(100, 100,
我一直在尝试在 UIScrollView 中获取 UIView 的转换后的 CGRect。如果我不放大它就可以正常工作,但是一旦我放大,新的 CGRect 就会发生变化。这是让我接近的代码: CGFl
UIView 具有以下内容: - convertPoint:toView: - convertPoint:fromView: - convertRect:toView: - convertRect:f
我一直断断续续地使用那种方法,但从未真正理解它们的行为方式。 每次我尝试使用它们时,我发现自己在尝试不同的方面时陷入黑暗,而且它似乎从来没有达到我期望的效果。 为了争论,我正在尝试转换从 UIKeyb
我是一名优秀的程序员,十分优秀!