UIView 视图间坐标系转换

如你所知,iOS中坐标系转换,需要使用以下两个系统API。

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

本文将详细讲述两个API的具体使用方法及含义。

  • convertRect: fromView:

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

// 转换viewB坐标系内区域rect,在viewA坐标系中的区域。
CGRect rect = viewB.bounds;
CGRect result = [viewA convertRect:rect fromView:viewB];

viewB坐标系内区域rect,在viewA坐标系中的区域。
上述方法rect取的是viewB.bounds的值,因此又可以描述为:
viewB在viewA内部坐标系中的区域。
  • convertRect: toView:

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

// 转换viewA坐标系内区域rect,在viewB坐标系中的区域。
CGRect rect = viewA.bounds;
CGRect result = [viewA convertRect:rect toView:viewB];
上述方法rect取的是viewA.bounds的值,因此又可以描述为:
viewA在viewB内部坐标系中的区域。
  • 常见误区

rect 参数的使用经常会出现错误:

CGRect result_false = [viewA convertRect:viewA.frame toView:viewB]; 错误:❌
CGRect result_right = [viewA convertRect:viewA.frame toView:viewB]; 正确:✅

result_false 为,viewA坐标系中frame位置,应设在viewB坐标系中的区域。
相对result_right 来说,result_false的origin会附加viewA.frame.origin的值。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容