До сих пор я мог анимировать пользовательские свойства моего подкласса CALayer благодаря + (BOOL)needsDisplayForKey:(NSString *)key
и CABasicAnimations
.
Однако оказывается, что объединение анимаций в цепочку может стать очень сложным, потому что весь код выполняется в одном animationDidStop:finished:
методе.
Поэтому я хотел переключиться на CATransactions
, поскольку они поддерживают новый синтаксис блока, который позволил бы мне указать блок завершения с помощью + (void)setCompletionBlock:(void (^)(void))block
.
Но мне кажется, что CATransaction
может анимировать только так называемые «анимируемые свойства», и это не работает с моими настраиваемыми свойствами слоя, даже с реализованным методом needsDisplayForKey:
.
Так есть ли способ сделать настраиваемые свойства в CALayer
для анимации с CATransaction
?
РЕДАКТИРОВАТЬ: Я намерен сделать что-то вроде:
[CATransaction begin];
[CATransaction setAnimationDuration:0.5];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[CATransaction setCompletionBlock:^{
NSLog(@"blabla");
}];
myLayer.myProperty = newValue;
[CATransaction commit];
Обновление значения myProperty до newValue
не анимировано. Я попытался реализовать actionForLayer:forKey:
в представлении, управляющем myLayer, чтобы вернуть CABasicAnimation
. Но actionForLayer:forKey:
никогда не вызывается с ключом myProperty
. И да, myLayer
не view.layer
, а подслой, и да, я установил делегата myLayer
на содержащее представление.