iOS的Core Animation动画网上一抓一大把,写的都很好
比如这个(太详细了,我都懒得看完):
Core Animation编程指南 - 士梦 - 博客园
还有这个
iOS开发基础知识:Core Animation(核心动画) - 简书
最近有个需求,想要动画结束后把视图删除掉,那么就需要在动画结束后判断是否是当前动画,以防误删。
Core Animation结束后,layer会回到原来的状态。设置fillMode参数为不还原动画
animation.fillMode = @"forwards";
动画结束的回调:
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
}
其实用过的同学都知道,在这个方法中使用anim是无法得到动画的,因为Core Animation动画默认执行完会删除。那么就要设置动画结束后不删除:
animation.removedOnCompletion = NO;
现在就可以在stop回调中得到动画了。如果您已经懂了,下面就不用看了
完整的步骤
-
在SB中创建一个用于移动的小view,和点击开始动画的小按钮。绑定按钮点击事件
- 在点击事件中为小view创建动画
-(IBAction)animationAction:(UIButton *)sender {
CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"position"];
[animation setDuration:0.5];
// 设置delegate
animation.delegate = self;
// 动画结束后不删除动画,否则在回调中无法得到动画
animation.removedOnCompletion = NO;
// 设置动画不还原
animation.fillMode = @"forwards";
[animation setFromValue:[NSValue valueWithCGPoint:CGPointMake(_aView.center.x, 150)]];
[animation setToValue:[NSValue valueWithCGPoint:CGPointMake(_aView.center.x, 350)]];
[self.aView.layer addAnimation:animation forKey:@"anim"]; // key 用来标识动画
}
- 动画结束回调,不删除了,这里改变背景色
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
if([self.aView.layer animationForKey:@"anim"] == anim) { // 根据上面的标识的key来判断动画
_aView.backgroundColor = [UIColor blackColor];
}
}
效果