美文网首页
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