美文网首页
坐标系转换

坐标系转换

作者: 空城为谁留 | 来源:发表于2016-10-21 10:40 被阅读0次

    相关方法如下:

    • (CGPoint)convertPoint:(CGPoint)point toView:(nullable UIView *)view;
    • (CGPoint)convertPoint:(CGPoint)point fromView:(nullable UIView *)view;
    • (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view;
    • (CGRect)convertRect:(CGRect)rect fromView:(nullable UIView *)view;

    判读两个控件是否有重叠

    一.当两个控件共用一个父控件的时候,直接通过如下示例判断
    CGRectIntersectsRect(view1.frame, view2.frame)
    

    判断的2个函数如下

    • bool CGRectContainsRect(CGRect rect1, CGRect rect2)
      • 判断rect1是否包含了rect2
    • bool CGRectIntersectsRect(CGRect rect1, CGRect rect2)
      • 判断rect1和rect2是否有重叠
      • 注意:rect1和rect2要在同一个坐标系,比较结果才准确
    二.当两个控件父控件不相同的时候

    需要先将两个控件矩形框转换到同一个坐标原点下,再将转换后的矩形框传到如下方法中:

    CGRectIntersectsRect(rect1, rect2)
    

    转换坐标系相关方法总结

    view2坐标系 : 以view2的左上角为坐标原点
    view1坐标系 : 以view1的左上角为坐标原点
    
    CGRect newRect = [view1 convertRect:rect fromView:view2];
    // 让rect这个矩形框, 从view2坐标系转换到view1坐标系, 得出一个新的矩形框newRect
    // rect和view2的含义 : 用来确定矩形框原来在哪
    
    CGRect newRect = [view1 convertRect:rect toView:view2];
    // 让rect这个矩形框, 从view1坐标系转换到view2坐标系, 得出一个新的矩形框newRect
    // rect和view1的含义 :用来确定矩形框原来在哪
    

    获得一个控件在window中的位置和尺寸

    • 以获得redView在window中的位置和尺寸为例
    CGRect newRect = [[UIApplication sharedApplication].keyWindow convertRect:redView.bounds fromView:redView];
    CGRect newRect = [[UIApplication sharedApplication].keyWindow convertRect:redView.frame fromView:redView.superview];
    CGRect newRect = [redView convertRect:redView.bounds toView:[UIApplication sharedApplication].keyWindow];
    CGRect newRect = [redView.superview convertRect:redView.frame toView:[UIApplication sharedApplication].keyWindow];
    CGRect newRect = [redView convertRect:redView.bounds toView:nil];
    CGRect newRect = [redView.superview convertRect:redView.frame toView:nil];
    

    相关文章

      网友评论

          本文标题:坐标系转换

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