美文网首页
ios之坐标系转换

ios之坐标系转换

作者: blocky | 来源:发表于2017-03-03 19:35 被阅读125次

    hello,小伙伴们,大家好!

       坐标系转换,不知道大家接触的多不多,我个人认为咋们开发中很多地方都可以用到这个知识点。那么何为坐标系转换了,可以这么理解:就是在同一屏幕可视范围内,可以将任意父控件的子控件的坐标系,转换到同一坐标系中。

     思路:判断两个不同父控件的子控件是否有交集或者重合。

     我们先从最简单的开始吧!

    1,同一父控件怎么判断,不同子控件是否有交集。

            a,同一父控件类,两个不同的子控件(相交)

    父控件相同

    从上图可以清晰看到,红色view 和绿色view 是相交的。用下面这个方法就可以做出判断:

    BOOLisIntersect = CGRectIntersectsRect(_redView.frame,_greenView.frame);

    输出结果:2017-03-02 16:42:19.471 text[12734:217314]  1 

    CGRectIntersectsRect这个方法返回的是BOOL值,如果相交返回YES,否则为NO;

       b,同一父控件类,两个不同的子控件(不相交)

    父控件相同,子控件无交集

    BOOLisIntersect = CGRectIntersectsRect(_redView.frame,_greenView.frame);

    输出结果:2017-03-02 16:42:19.471 text[12734:217314]  0

    2,不同父控件的情况,不同子控件是否有交集

    不同父控件,子控件不相交

    同样按上述方法执行后,结果如图所示.问什么我们看到的红色View和粉色view还有绿色View都有相交,为什么打印出来的结果会不同了.先确定方法肯定是没问题的,那么问题就出来了,是不是在同一个坐标系中了.怎么解决问题了,后面会说道.

    再看一个稍微复杂的例子(这个图片有点模糊,图片丢失了一次,大家见谅):

    多张图片有无交集

    这个是求,红色View和绿色View有无交集,从图上可以看出,是有交集的,但是按照上面的方法我们算出来的还是为0,也就是返回的为NO,所以像这种不在同一父控件的的子控件要判断是否重叠必须进行坐标系转换.

    3,坐标系转换的方法

    转换坐标系的代码

    注意判断子控件是否相交,最好把子控件的坐标原点转到相同的父控件上,这样就不会出现,看着有交集,计算无交集的情况了.这里推荐大家把坐标系都转到可是主窗口坐标系上,这样是肯定不会出错的.

    4,坐标系转换的使用场景

        父子控制器,子控制器在刷新数据的情况.只需要刷新一个子控制器的数据的时候,可以利用交集判断哪个子控制器显示在窗口上来是先效果.

    5,结束语

           这就是本节想要跟小伙伴们分享的内容,有误之处请大家指出,希望同大家共同进步.

    相关文章

      网友评论

          本文标题:ios之坐标系转换

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