定义不透明度的CAKeyframeAnimation路径?

时间:2012-11-24 00:24:23

标签: ios cakeyframeanimation

CAKeyframeAnimation可以与路径而不是关键帧值一起使用 动画(非位置)属性?这是关键代码:

CAKeyframeAnimation *theLeftGradientAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
theLeftGradientAnimation.removedOnCompletion = NO;
theLeftGradientAnimation.fillMode = kCAFillModeForwards;
theLeftGradientAnimation.duration = (isToClose ? self.fromDuration : self.toDuration);

//test with a linear monotonic path to define the opacity function response
UIBezierPath    *shadePath = [UIBezierPath bezierPath];
[shadePath moveToPoint:CGPointMake(0.0f, 0.0)];  //ASSUME coords are: x->t y->alpha(t)
[shadePath addLineToPoint:CGPointMake(1.0f, 1.0f)];  //ASSUME time normalized to duration
[shadePath closePath];

theLeftGradientAnimation.path = shadePath.CGPath;

但是,非常正常 - 不透明度可以平滑地制作动画,但不是单调或完全根据路径的变化(假设路径是'标准化'来自(0.0,0.0) )到(1.0,1.0)就像一个缓动函数)。请注意,我为位置设置动画或在路径上移动图层,但希望将其用于任何可动画的属性。

文档中存在一些模糊性,表明可以使用路径来有效地定义动画时间与动画属性的传递函数(从而替代将基于此创建的关键帧值数组)转换功能)。同样在iOS 6文档中,“Keyframe Timing and Pacing Extensions”确实试图澄清路径与值的使用,但仍然含糊不清。

1 个答案:

答案 0 :(得分:0)

请注意,CAKeyframeAnimation具有timingFunctions(复数)属性,并忽略timingFunction。在您的情况下,由于您需要单调,您可能需要设置theLeftGradientAnimation.timingFunction = kCAMediaTimingFunctionLinear。默认的timingFunction确实非线性插值。

有关timingFunctions的更深入描述,请参阅文档,以及如果内置的CAMediaTimingFunction不足以提供自己的{{1}}。