iOS 不同视图之间的坐标转换

API解释

1、将view_A视图上的点坐标point转换成目标视图view_B上的点坐标,返回在目标视图view_B上的点坐标。

- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view;
//栗子
 [view_A convertRect:view_A上的坐标 toView:view_B];

2、将目标视图view_B上的点坐标point转换成view_A视图上的点坐标,并返回在当前view_A视图中的坐标点。

- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view;
//栗子
 [view_A convertRect:view_A上的坐标 fromView:view_B];

3、 将接收器视图的rect转换成目标视图view上,并返回在目标视图view上对应的的rect

- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;

4、 将目标视图上view上的rect转换成接收器视图上的rect,并返回在接收器视图上的rect

- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;

其实就是两个视图上坐标系的转换,将A视图上的point或frame转成B视图上的point或frame,前提是A、B视图在同一个屏幕中。

用法举例

假如控制器VC上有一个tableView,当我们要把UITableViewCell中的子视图btn的frame转换到VC上view视图上时:

// 在VC中实现如下代码,此rc为btn在VC中的rect
CGRect rc = [cell convertRect:cell.btn.frame toView:self.view];
//或
CGRect rc = [self.view convertRect:cell.btn.frame fromView:cell];

等价于下面的方式:

CGRect rc = [btn.superview convertRect:btn.frame toView:self.view];
//或
CGRect rc = [self.view convertRect:btn.frame fromView:btn.superview];

demo

SLVideo.gif

demo源码地址,源码还在更新中。。

你可能感兴趣的:(iOS 不同视图之间的坐标转换)