UIView 主要负责视图与用户的交互,真正的内容显示是通过UIView里面的图层CALayer来完成的(没有交互能力)
1.创建CALayer
CALayer *layer = [CALayer layer];
layer.backgroundColour = [UIColor redColor].CGColor;---颜色类型必须为CGColor;
layer.frame = CGRectMake(50,50,100,100);//定位layer在父视图的位置
layer.cornerRadius = 50;//设置圆角,定为宽度的一半可以将整个图形变为圆形
layer.borderColor = [UIColor blueColor].CGColor;//增加边框的颜色
layer.borderWidth = 2;//增加的边框的宽度
--layer.position = self.view.center;//layer在父视图的图钉定位,与frame一样
--layer.anchorPoint = CGPointMake(1,1)//在layer内的图钉定位点,范围为0-1.
[self.view.layer addSublayer:layer];
2.Layer 动画
旋转
_layer.transform = CATransform3DRotate(_layer.transform,10/180.0*M_PI,1,1,1);
放大缩小
_layer.transform = CATransform3DScale(_layer.transform,2,2,2);按两倍放大
平移
_layer.transform = CATransform3DTranslate(_layer.transform,10,10,0);
//基本动画
渐变,从有到无
CABasicAnimation *capacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
capacityAnimation.fromValue = @1;
capacityAnimation.fromValue = @0;
[_layer addAnimation:capacityAnimation forKey:nil];
放大,从0.5倍到2倍
CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
scaleAnimation.fromValue = @0.5;
scaleAnimation.fromValue = @2;
scaleAnimation.fillMode = kCAFillModeForwards;最后以什么填充
scaleAnimation.repeatCount = MAXFLOAT;重复次数
scaleAnimation.duration = 1;持续时间
[_layer addAnimation:scaleAnimation forKey:nil];
位置移动
CABasicAnimation *moveAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)];
[_layer addAnimation:moveAnimation forKey:nil];
旋转
CABasicAnimation *rotateAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
rotateAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
rotateAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(_layer.transform,M_PI,0,0,1)];
[_layer addAnimation:rotateAnimation forKey:nil];
多种动画效果叠加
CAAnimationGroup *group = [CAAnimationGroup animation];
group.duration = 1;
group.removedOnCompletion = NO;
group.fillMode = kCAFillModeForwards;
group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
group.animations = @[capacityAnimation, scaleAnimation, moveAnimation, rotateANimation];
[_layer addAnimation:group forKey:nil];
在旋转中,上边的写法转换成弧度之后不能转多圈,下面实现转多圈
CABasicAnimation *zrotateANimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
zrotateANimation.fromValue = [NSNumber numberWithFloat:0];
zrotateANimation.toValue = [NSNumber numberWithFloat:M_PI * 4.0];//4圈