1

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 文档中,确实试图澄清路径与值的使用,但仍然模棱两可。

4

1 回答 1

0

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

有关timingFunctions 的更深入描述,以及CAMediaTimingFunction如果内置函数不够用,如何提供您自己的文档,请参阅文档。

于 2012-11-24T00:54:45.890 回答