1、创建一个最基本的动画,然后往y轴做一个移动,
当执行动画的时候,真正移动的不是layer本身,而是Presentation Tree,当动画移动的时候,会把原始涂层隐藏,动画完成后,就会把Presentation图层移除,原始涂层就会显示,所以动画会恢复成原来的状态
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 创建动画
CABasicAnimation *baseAnimation = [CABasicAnimation animation];
// 设置动画的移动方向
baseAnimation.keyPath = @"position.y";
// 设置动画的移动距离
baseAnimation.toValue = @400;
// 设置动画的移动时间
baseAnimation.duration = 1;
// 把动画添加到layer上面
[_redView.layer addAnimation:baseAnimation forKey:nil];
}
2、动画结束之后,停留在移动后的位置
// 创建动画
CABasicAnimation *baseAnimation = [CABasicAnimation animation];
// 设置动画的移动方向
baseAnimation.keyPath = @"position.y";
// 设置动画的移动距离
baseAnimation.toValue = @400;
// 设置动画的移动时间
baseAnimation.duration = 1;
//是否在动画结束后将其移除
baseAnimation.removedOnCompletion = NO;
// 设置layer最后的位置状态
/**
* kCAFillModeForwards :动画结束后,layer会一直保持动画的最后状态
* kCAFillModeBackwards :动画开始前,会马上显示第一帧的动画,然后等动画执行完后,layer会一直保持动画的最后状态
* kCAFillModeBoth: kCAFillModeForwards & kCAFillModeBackwards
* kCAFillModeRemoved: 默认,动画结束后,layer会回到原来的状态
*/
baseAnimation.fillMode = kCAFillModeForwards;
// 把动画添加到layer上面
[_redView.layer addAnimation:baseAnimation forKey:nil];
3、隐式动画的控制-修改背景颜色添加动画效果
[CATransaction begin];
// 设置动画时间
[CATransaction setAnimationDuration:1];
_layer.backgroundColor = [UIColor yellowColor].CGColor;
[CATransaction commit];