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”确实试图澄清路径与值的使用,但仍然含糊不清。
答案 0 :(得分:0)
请注意,CAKeyframeAnimation
具有timingFunctions
(复数)属性,并忽略timingFunction
。在您的情况下,由于您需要单调,您可能需要设置theLeftGradientAnimation.timingFunction = kCAMediaTimingFunctionLinear
。默认的timingFunction确实非线性插值。
有关timingFunctions的更深入描述,请参阅文档,以及如果内置的CAMediaTimingFunction
不足以提供自己的{{1}}。