так как текущий путь по какой-то причине позволяет анимации продолжаться правильно, когда свойство установлено. Я хотел бы, чтобы в документах было больше ясности по этому поводу. Спасибо за всю твою помощь.
ю, что shadowPath CALayer можно анимировать только с помощью явной анимации, однако я до сих пор не могу заставить это работать. Я подозреваю, что я не передаюtoValue
правильно - как я понимаю, это должно бытьid
, но свойство принимает CGPathRef. Хранить это вUIBezierPath
не похоже на работу. Я использую следующий код для проверки:
CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:@"shadowPath"];
theAnimation.duration = 3.0;
theAnimation.toValue = [UIBezierPath bezierPathWithRect:CGRectMake(-10.0, -10.0, 50.0, 50.0)];
[self.view.layer addAnimation:theAnimation forKey:@"animateShadowPath"];
(Я использую минус значения, чтобы гарантировать, что тень выходит за пределы вида, лежащего поверх него ... слояmasksToBounds
свойство установлено вNO
).
Как достигается анимация shadowPath?
ОБНОВИТЬ
проблемаоколо решена. К сожалению, главной проблемой была несколько небрежная ошибка ...
Ошибка, которую я сделал, состояла в том, чтобы добавить анимацию к корневому слою контроллера представления, а не к слою, который я выделил для тени. Кроме того, @ pe8ter был прав в том, чтоtoValue
должен бытьCGPathRef
приведение кid
(очевидно, когда я попробовал это раньше, у меня все еще не было анимации из-за неправильной ошибки слоя). Анимация работает со следующим кодом:
CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:@"shadowPath"];
theAnimation.duration = 3.0;
theAnimation.toValue = (id)[UIBezierPath bezierPathWithRect:myRect].CGPath;
[controller.shadowLayer addAnimation:theAnimation forKey:@"shadowPath"];
Я ценю, что это было трудно заметить из примера кода, который я предоставил. Надеюсь, он все еще может быть полезен для людей в подобной ситуации.
Тем не менее, когда я пытаюсь добавить строку
controller.shadowLayer.shadowPath = [UIBezierPath bezierPathWithRect:myRect].CGPath;
анимация перестает работать, и тень просто мгновенно переходит на конечную позицию. Документы говорят добавить анимацию с тем же ключом, что и изменяемое свойство, чтобы переопределить неявную анимацию, созданную при установке значения свойства, однако shadowPath не может генерировать неявные анимации ... так как я могу получить новое свойство остатьсяпосле анимация?