iOS动画

CABasicAnimation

2020-04-29  本文已影响0人  ienos

相当于只有两个关键帧的核心动画

动画设置的value不会改变原来的值。默认动画结束后恢复原来的值

动画暂停

- (void)pause {
    // 取得指定图层动画的媒体时间,后面参数用于指定子图层,这里不需要
    CFTimeInterval interval=[_layer convertTime:CACurrentMediaTime() fromLayer:nil];
    // 设置时间偏移量,保证暂停时停留在旋转的位置
    [_layer setTimeOffset:interval];
    // 速度设置为0,暂停动画
    _layer.speed=0;
}

动画恢复

- (void)resume {
    // 获得暂停的时间
    CFTimeInterval beginTime= CACurrentMediaTime()- _layer.timeOffset;
    // 设置偏移量
    _layer.timeOffset=0;
    // 设置开始时间
    _layer.beginTime=beginTime;
    // 设置动画速度,开始运动
    _layer.speed=1.0;
}

代码示例


初始化 CABasicAnimation
~~ CABasicAnimation *basicAnimation = [[CABasicAnimation alloc]init];

动画的类型(属性动画)用来做动画的属性名
~~ basicAnimation.keyPath = @"position";

动画的起始效果
~~ basicAnimation.fromValue

动画的最终效果
~~ basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(150, 400)];

设置重复次数, 永久的话设置为 HUGE_VALF
~~ basicAnimation.repeatCount = MAXFLOAT;

指定动画开始时间;从开始指定延迟几秒执行的话,请设置为「CACurrentMediaTime() + 秒数」的形式
~~ basicAnimation.beginTime = CACurrentMediaTime() + 2;

动画结束时是否执行逆动画
~~ basicAnimation.autoreverses = YES;

设定动画的速度变化 (先加速后减速)
~~ basicAnimation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut];
通过贝塞尔差值,设置运动速度变化;工具 - 贝塞尔差值在线模拟
~~ basicAnimation.timingFunction = [CAMediaTimingFunction functionWithControlPoints:0 :0 :0 :0];

设置动画时间
~~ basicAnimation.duration = 3;

指定 CAAnimationDelegate 协议方法代理人
~~ basicAnimation.delegate = self;

动画结束后不恢复
~~ basicAnimation.removedOnCompletion = NO;
~~ basicAnimation.fillMode = kCAFillModeForwards;

fillMode 的作用就是决定当前对象过了非 active 时间段的行为,比如动画开始之前、动画开始之后。如果是一个动画 CAAnimation,则需要将其 removedOnCompletion 设置为 NO,不然 fillMode 不起作用

给layer添加动画
~~ [self.layer addAnimation:basicAnimation forKey:@"position"];


上一篇 下一篇

猜你喜欢

热点阅读