美文网首页iOS动画程序员iOS Developer
Core Animation动画结束回调 以及动画不还原的方法

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

作者: 阳光下慵懒的驴 | 来源:发表于2016-05-31 11:14 被阅读2610次

    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,和点击开始动画的小按钮。绑定按钮点击事件


      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动画结束回调 以及动画不还原的方法

        本文链接:https://www.haomeiwen.com/subject/enpcdttx.html