美文网首页
UIView与CALayer || frame与boun

UIView与CALayer || frame与boun

作者: Someone_Joker | 来源:发表于2019-11-22 15:47 被阅读0次

    1、UIView 与 CALayer 区别

            UIView可以传递事件而CALayer无法参与事件传递,这个主要由于UIkit中使用UIResponder作为相应对象,UIKit中都直接或间接继承UIResponder,而CALayer则是继承NSObject,没有相应事件处理接口。

            CALayer 主要功能在于绘制UI,如果在不需要处理相应事件时可以直接使用CALAyer进行绘制,提高性能,UIView可以理解成CALayer的载体,为其扩展可以进行事件传递。

    2、frame 与 bounds 区别

            frame 是UIView在意父视图坐标系为基准的位置、大小

            bounds 是UIView在意自身坐标系为基准的位置、大小

    例子:

    例子   1

        UIView*aView = [[UIViewalloc]init];    

        aView.frame=CGRectMake(100,100,100,100);

        aView.transform = CGAffineTransformMakeScale(2, 2);

        aView 的 frame (50,50,200,200)

        aView 的 bounds (0,0,100,100)

    例子   2

        UIView*bView = [[UIViewalloc]init];

        bView.frame=CGRectMake(100,100,100,100);

        bView 的 frame (100,100,100,100)

        bView 的 bounds (0,0,100,100)

    总结:

        由例子1与列子2可以知道bounds在修改frame或者进行缩放、旋转等操作不会改变,而frame却会因为缩放、旋转变化而变化。

        因为frame的位置是由 position 与 anchorPoint 决定

    公式为:

        frame.x = position.x - anchorPoint.x  *  width

        frame.y = position.y - anchorPoint.y  *   height

    position 与 anchorPoint

    position 与 anchorPoint 都是CALayer的属性

    position是layer中的anchorPoint在superLayer中的位置坐标

    anchorPoint 又称锚点,默认为(0.5,0.5),是作为缩放、旋转等进行动画操作将以该点作为中心点进行对应的动画行为

    互不影响原则:单独修改position与anchorPoint中任何一个属性都不影响另一个属性。

    公式为:

          position.x = frame.origin.x + anchorPoint.x  *  width;

          position.y = frame.origin.y + anchorPoint.y  *   height; 

    相关文章

      网友评论

          本文标题:UIView与CALayer || frame与boun

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