美文网首页
UIView 视图间坐标系转换

UIView 视图间坐标系转换

作者: 吕木 | 来源:发表于2018-10-22 19:14 被阅读19次

如你所知,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的值。

相关文章

网友评论

      本文标题:UIView 视图间坐标系转换

      本文链接:https://www.haomeiwen.com/subject/kdxnzftx.html