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];


原文地址:https://www.cnblogs.com/Xfsrn/p/5000350.html