zoukankan      html  css  js  c++  java
  • iOS开发核心动画之图层Layer

    一. layer

        在每个UIView内部都有一个layer这样一个属性.

        UIView之所以能够显示,就是因为它里面有这个一个层,才具有显示的功能.

        

    二. 操作layer改变UIView的外观

    1. 设置阴影

    1. _RedView.layer.shadowOpacity = 1;

    2. 设置阴影的圆角

    1. _RedView.layer.shadowRadius =10;

    3. 设置阴影的压缩

    1. _RedView.layer.shadowColor = [UIColor blueColor].CGColor;

    4. 设置边框宽度和颜色

    1. _RedView.layer.borderColor = [UIColor whiteColor].CGColor; // 颜色,在图层中使用CoreGraphics的CGColorRef
    2. _RedView.layer.borderWidth = 2; // 宽度

    5. 设置view的圆角半径,如果设置为view宽度的一半就是一个圆

    1. _RedView.layer.cornerRadius = 50;

    6. 超出裁剪区域的部分全部裁剪掉

    1. _imageView.layer.masksToBounds = YES;


    注意:UIImageView当中Image并不是直接添加在层上面的.这是添加在layer当中的contents里.

        我们设置层的所有属性它只作用在层上面.对contents里面的东西并不起作用.所以我们看不到图片有圆角的效果.

        想要让图片有圆角的效果.可以把masksToBounds这个属性设为YES,

        当设为YES,把就会把超过根层以外的东西都给裁剪掉.


    7. layer的CATransform3D属性

    只有旋转的时候才可以看出3D的效果.

          旋转

          x,y,z 分别代表x,y,z轴.

          CATransform3DMakeRotation(M_PI, 1, 0, 0);


          平移

          CATransform3DMakeTranslation(x,y,z)


          缩放

          CATransform3DMakeScale(x,y,z);

          

          可以通过KVC的方式进行设置属性.

          但是CATransform3DMakeRotation它的值,是一个结构体, 所以要把结构转成对象.

          NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];


    三. 自定义CALayer

    1. 创建layer

    1. CALayer *layer = [CALayer layer];
    2. layer.frame = CGRectMake(50, 50, 100, 100);
    3. layer.backgroundColor = [UIColor redColor].CGColor;
    4. [self.view.layer addSublayer:layer];

    2. 给layer设置图片

    1. layer.contents = (id)[UIImage imageNamed:@"阿狸头像"].CGImage;


    3. UIView和CALayer的选择

        对比CALayer,UIView多了一个事件处理的功能。也就是说,CALayer不能处理用户的触摸事件,而UIView可以

        如果显示出来的东西需要跟用户进行交互的话,用UIView;

        如果不需要跟用户进行交互,用UIView或者CALayer都可以

        CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级


    4. layer的属性

    1> position : 设置layer在父控件中的位置,以父控件的(0, 0)为坐标原点

    2> anchorPoint(锚点) : 决定layer身上的哪个点在position点所指的位置, 以自己的左上角为坐标原点(0, 0);

        取值范围: 0 ~ 1;

        默认值: (0.5, 0.5);

     

    layer身上的anchorPoint会自动定到position所在的位置.


    四. 隐式动画

        控件中layer层称为根层,手动添加的layer为非根层.修改非根层属性会自动有隐式动画

    如何取消隐式动画?

        首先要了解动画底层是怎么做的.动画的底层是包装成一个事务来进行的.

    什么是事务?

        很多操作绑定在一起,当这些操作执行完毕后,才去执行下一个操作.


    开启事务

    [CATransaction begin];

    设置事务没有动画

    [CATransaction setDisableActions:YES];

    设置动画执行的时长

    [CATransaction setAnimationDuration:2];

    提交事务

     [CATransaction commit];


  • 相关阅读:
    linux中的中断处理框架
    linux中的异常处理流程
    如何使用次设备号控制多个LED
    装载内核模块时,自动添加设备文件
    第一个字符设备驱动程序
    网络文件系统
    点击全选或全不选,一个页面有多个全选和全不选的时候
    ubuntu 20.04 遇到的问题
    Ubuntu20.04 初始没有的东西
    Ubuntu 20 安装pycharm备忘
  • 原文地址:https://www.cnblogs.com/Xfsrn/p/5000350.html
Copyright © 2011-2022 走看看