设定动画CABasicAnimation的属性和说明动画
属性 | 说明 |
---|---|
duration | 动画的时间 |
repeatCount | 重复的次数。不停重复设置为 HUGE_VALF |
repeatDuration | 设置动画的时间。 |
beginTime | 指定动画开始的时间。从开始延迟几秒的话,设置为【CACurrentMediaTime() + 秒数】 的方式 |
timingFunction | 设置动画的速度变化 |
autoreverses | 动画结束时是否执行逆动画 |
fromValue | 所改变属性的起始值 |
toValue | 所改变属性的结束时的值 |
byValue | 所改变属性相同起始值的改变量 |
//建立一个image viewspa
UIImageView *imageview=[[UIImageView alloc]init];orm
imageview.image=[UIImage imageNamed:@"logo.png"];事件
imageview.frame=CGRectMake(50, 50, imageview.image.size.width, imageview.image.size.height);图片
[self.view addSubview:imageview];ci
//动画关键字熟悉设置说明 rem
值 | 说明 | 使用形式 |
---|---|---|
transform.scale | 比例转化 | @(0.8) |
transform.scale.x | 宽的比例 | @(0.8) |
transform.scale.y | 高的比例 | @(0.8) |
transform.rotation.x | 围绕x轴旋转 | @(M_PI) |
transform.rotation.y | 围绕y轴旋转 | @(M_PI) |
transform.rotation.z | 围绕z轴旋转 | @(M_PI) |
cornerRadius | 圆角的设置 | @(50) |
backgroundColor | 背景颜色的变化 | (id)[UIColor purpleColor].CGColor |
bounds | 大小,中心不变 | [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)]; |
position | 位置(中心点的改变) | [NSValue valueWithCGPoint:CGPointMake(300, 300)]; |
contents | 内容,好比UIImageView的图片 | imageAnima.toValue = (id)[UIImage imageNamed:@"to"].CGImage; |
opacity | 透明度 | @(0.7) |
contentsRect.size.width | 横向拉伸缩放 | @(0.4)最好是0~1之间的 |
//1.移动animation
CABasicAnimation *animate=[CABasicAnimation animationWithKeyPath:@"position"];it
//动画持续时间io
animate.duration=2;
animate.repeatDuration=2;
//重复的次数。不停重复设置为 HUGE_VALF
animate.repeatCount=HUGE_VALF;
//动画结束时是否执行逆动画
animate.autoreverses=YES;
//指定动画开始的时间
animate.beginTime=CACurrentMediaTime()+2;
//用CABasicAnimation执行动画,在动画结束后会回归动画开始前的状态。想要解决的话,必须设置“removedOnCompletion”和“fillMode”这两个属性
animate.removedOnCompletion=NO;
animate.fillMode=kCAFillModeForwards;
animate.fromValue=[NSValue valueWithCGPoint:imageview.layer.position];
animate.toValue=[NSValue valueWithCGPoint:CGPointMake(200, 200)];
//设置动画的速度变化
animate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
//视图添加动画
[imageview.layer addAnimation:animate forKey:@"move-layer"];
//2.旋转
CABasicAnimation *secondAnimate=[CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
secondAnimate.duration=2;
secondAnimate.repeatCount=10;
secondAnimate.beginTime=CACurrentMediaTime()+2;
secondAnimate.fromValue=[NSNumber numberWithFloat:0.0];
secondAnimate.toValue=[NSNumber numberWithFloat:M_PI];
//设置动画的速度变化
secondAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[imageview.layer addAnimation:secondAnimate forKey:@"rotate-layer"];
//3.缩放
CABasicAnimation *scaleAnimate=[CABasicAnimation animationWithKeyPath:@"transform.scale"];
scaleAnimate.duration=2;
scaleAnimate.repeatCount=2;
scaleAnimate.fromValue=[NSNumber numberWithFloat:1.0];
scaleAnimate.toValue=[NSNumber numberWithFloat:2.0];
//设置动画的速度变化
scaleAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[imageview.layer addAnimation:scaleAnimate forKey:@"scale-layer"];
//4.渐隐动画
CABasicAnimation *opacityAnimate=[CABasicAnimation animationWithKeyPath:@"opacity"];
opacityAnimate.duration=2;
opacityAnimate.repeatCount=2;
opacityAnimate.fromValue=[NSNumber numberWithFloat:0.0];
opacityAnimate.toValue=[NSNumber numberWithFloat:1.0];
[imageview.layer addAnimation:opacityAnimate forKey:@"opacity-layer"];
//5.组合动画
CAAnimationGroup *group=[CAAnimationGroup animation];
group.duration=2;
group.repeatCount=2;
group.animations=[NSArray arrayWithObjects:animate,secondAnimate, nil];
[imageview.layer addAnimation:group forKey:@"group-layer"];
//6.捕获动画开始时和终了时的事件
//为了获取动画的开始和结束事件,须要实现协议
animate.delegate=self;
- (void)animationDidStart:(CAAnimation *)theAnimation {
//动画开始了
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
//动画结束了
}