美文网首页
iOS 核心动画~基础动画

iOS 核心动画~基础动画

作者: 微笑不是你 | 来源:发表于2019-01-23 18:02 被阅读0次

    核心动画之基础动画(CABasicAnimation)

    概述

    • 基础动画主要用于完成对象指定动画属性两个Value之间的过渡动画

    动画过程

    • 初始化动画并设置动画keyPath
    • 设置动画其他属性
    • 给指定layer添加动画
    • 停止动画

    初始化动画并设置动画keyPath

    CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
    
    • 常用的keypath : *位移:position * 缩放:transform.scale 透明度:opacity 旋转:transform 圆角:cornerRadius

    设置动画其他属性

        /* 设置代理 */
        basicAnimation.delegate = self;
        /* 到达位置 */
        basicAnimation.toValue = [NSValue valueWithCGPoint:position];
        /* 存储结束位置 */
        [basicAnimation setValue:[NSValue valueWithCGPoint:position] forKey:@"positionToEnd"];
        /* 延迟执行 */
        basicAnimation.beginTime = CACurrentMediaTime() + 1;
        /* 动画时间 */
        basicAnimation.duration = 1;
        /* 动画节奏 */
        basicAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        /* 动画速率 */
        basicAnimation.speed = 0.1;
        /*  图层是否显示执行后的动画执行后的位置以及状态 */
        basicAnimation.removedOnCompletion = YES;
        basicAnimation.fillMode = kCAFillModeBoth;
        /* 动画完成后是否以动画形式回到初始值 */
        basicAnimation.autoreverses = YES;
       /*  动画时间偏移 */
        basicAnimation.timeOffset = 1;
    

    添加到layer

    [self.animationView.layer addAnimation:basicAnimation forKey:NSStringFromSelector(_cmd)]
    

    移除动画

    [self.animationView.layer removeAllAnimations];
    //[self.animationView.layer removeAnimationForKey:@"positionToEnd"];
    

    其他方法

    • 暂停动画
    -(void)animationPause{
        //获取当前layer的动画媒体时间
        CFTimeInterval interval = [self.animationView.layer convertTime:CACurrentMediaTime() toLayer:nil];
        //设置时间偏移量,保证停留在当前位置
        self.animationView.layer.timeOffset = interval;
        //暂定动画
        self.animationView.layer.speed = 0;
    }
    
    • 恢复动画
    -(void)animationResume{
        //获取暂停的时间
        CFTimeInterval beginTime = CACurrentMediaTime() - self.animationView.layer.timeOffset;
        //设置偏移量
        self.animationView.layer.timeOffset = 0;
        //设置开始时间
        self.animationView.layer.beginTime = beginTime;
        //开始动画
        self.animationView.layer.speed = 1;
    }
    

    监听动画的开始以及结束

    • 动画开始
    - (void)animationDidStart:(CAAnimation *)anim{
        NSLog(@"动画开始");
    }
    
    • 动画结束
    - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
        NSLog(@"动画结束");
        //保留动画结束后的位置
        CGPoint point = [[anim valueForKey:@"positionToEnd"] CGPointValue];
        self.animationView.frame = CGRectMake(point.x - self.animationView.frame.size.width/2, point.y - self.animationView.frame.size.height/2, self.animationView.frame.size.width, self.animationView.frame.size.height);
    }
    

    相关文章

      网友评论

          本文标题:iOS 核心动画~基础动画

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