До сих пор я был в состоянии анимировать пользовательские свойства моего подкласса 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
в содержащее представление.