首先来认识CALayer,这是一个与UIView互相依存的类,CALayer可以说是基于UIView的,有着很多属性,如frame、backgroundclolor,还有着自己的delegate,虽然里面的方法不多。layer还可以添加sublayer,就像view可以添加subview一样。因为CALayer是管理基于图像的内容,也是用这部分来实现动画。很好的一个例子就是设置圆角图像:
imageview.layer.cornerRadius = 10;
上述代码就是获取imageview的layer的cornerradius属性,设置为10,如果想直接设置为圆形可以
self.imageview.layer.cornerRadius = CGRectGetHeight(imagemageView.bounds)/2;
self.imageview.layer.masksToBounds = YES;
千万记得maskToBounds属性的值要设为YES,这个属性决定是否所有layer都按照父layer的bounds剪裁,简单来说这个属性不设为YES就不能显示圆角效果,效果如下:
CALayer也可以独立初始化,设置属性,不一定是要从view中获取,设置好后添加到父layer,如下:
layer = [[CALayer alloc] init];
layer.backgroundColor = [UIColor redColor].CGColor;
layer.frame = CGRectMake(100, 200, 50, 50);
layer.cornerRadius = 10;
[self.view.layer addSublayer:layer];
介绍完CALayer,下面就要来认识CAAnimation,CAAnimation只是一个抽象类,常用的具体子类有
CAPropertyAnimation 1
CABasicAnimation 2
CAKeyframeAnimation 3
CAAnimationGround 4
其中1又是2和3的父类,1的作用主要是提供了一个方法
[objc] view plain copy print?
+animationWithKeyPath
该方法主要是针对CALayer的属性来进行动画,下面来看一个简单的例子:
CABasicAnimation *scale = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
scale.fromValue = [NSNumber numberWithFloat:1];
scale.toValue = [NSNumber numberWithFloat:2.5];
scale.fillMode = kCAFillModeForwards;
scale.repeatCount = MAXFLOAT;
scale.duration = 1;
[layer addAnimation:scale forKey:@"scale"];
以上就实现了简单的放大动画,从原本的体积放大到2.5倍,动画时间为1秒,并且重复
一个layer可以添加多个动画,先创建多个动画,然后用CAAnimationGround管理:
CAAnimationGroup *group = [CAAnimationGroup animation];
group.duration = 2;
group.autoreverses = YES;
group.animations = @[moveAnimation, scaleAnimation, rotateAnimation];
group.repeatCount = MAXFLOAT;
[layer addAnimation:group forKey:@"group"];
以上就轻松用CAAnimationGround管理了多个动画,然后layer添加CAAnimationGround,layer就可以实现多个动画了