CABasicAnimation用于实现两个状态之间的动画,只需要给出一个初始状态和一个结束状态,系统将自动实现两个状态之间的动画效果
UIView *demoView = [[UIView alloc]init];
demoView.frame = CGRectMake(100, 100, 50, 50);//position为(125,125)
demoView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:demoView];
CABasicAnimation *anima = [CABasicAnimation animationWithKeyPath:@"position"];
anima.fromValue = [NSValue valueWithCGPoint:CGPointMake(200, 300)];
anima.toValue = [NSValue valueWithCGPoint:CGPointMake(300, 500)];
anima.duration = 3.0f;
anima.beginTime = CACurrentMediaTime() + 1;
[demoView.layer addAnimation:anima forKey:@"positionAnimation"];
上面的代码的意思是,1秒后将View的position
从fromValue
移动到toValue
,该动画持续3秒钟
KeyPath
填写的动画需要改变的参数,这个参数是CALayer的参数(CABasicAnimation是对CALayer进行展示动画的),CALayer中注释中有Animatable的参数都是支持动画效果的。
fromValue
指定动画的初始状态
toValue
指定动画的结束状态
byValue
指定动画的增量
当只指定一个状态时:
只指定fromValue
,视图的原有状态将变成结果状态,参考上面的代码里参数的值,视图的中心将从(200,300)移动到(125,125)
只指定toVaule
,参考上面的代码里参数的值,视图的中心将从(125,125)移动到(300, 500)
只指定byValue
,如(byX,byY),视图中心将从(125,125)移动到(125+byX,125+byY)
当指定两个状态的时:
toValue
与fromValue
,不需要解释了吧
toValue
与byValie
,如(byX,byY),视图中心将从(200-byX,300-byY)移动到(300,500)
fromValue
与byValue
,如(byX,byY),视图中心将从(200,300)移动到(200+byX,300+byY)
简单点说 fromValue + byValue = toValue
,最后能等得出toValue
与fromValue
上面三个值不能同时指定,同时指定动画初始状态和结果状态将不能确定。
- (void)addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key;
最后将动画添加到视图的CALayer层上,key在需要检测动画播放进度或者是移除动画时会使用的,请注意最好不要重复。
网友评论