Core Animation动画结束回调 以及动画不还原的方法

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回调中得到动画了。如果您已经懂了,下面就不用看了

完整的步骤

  1. 在SB中创建一个用于移动的小view,和点击开始动画的小按钮。绑定按钮点击事件


    Core Animation动画结束回调 以及动画不还原的方法_第1张图片
    SB
  2. 在点击事件中为小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 用来标识动画
}
  1. 动画结束回调,不删除了,这里改变背景色
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
      if([self.aView.layer animationForKey:@"anim"] == anim) { // 根据上面的标识的key来判断动画
        _aView.backgroundColor = [UIColor blackColor];
    }
}

效果

Core Animation动画结束回调 以及动画不还原的方法_第2张图片
效果

你可能感兴趣的:(Core Animation动画结束回调 以及动画不还原的方法)