Можно ли использовать 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» делается попытка прояснить использование пути по сравнению со значениями, но это все еще неоднозначно.