В подклассе CALayer, над которым я работаю, у меня есть пользовательское свойство, которое я хочу анимировать автоматически, то есть, предполагая, что свойство называется «myProperty», мне нужен следующий код:
[myLayer setMyProperty:newValue];
Чтобы вызвать плавную анимацию из текущее значение в "newValue".
Используя подход переопределения actionForKey :и needDisplayForKey:(см. следующий код )Я смог заставить его работать очень хорошо, просто интерполируя между старым и новым значением.
Моя проблема в том, что я хочу использовать немного другую продолжительность анимации или путь (или что-то еще )в зависимости как от текущего значения, так и от нового значения свойства, и я не смог понять, как получить новое значение из actionForKey:
Заранее спасибо
@interface ERAnimatablePropertyLayer : CALayer {
float myProperty;
}
@property (nonatomic, assign) float myProperty;
@end
@implementation ERAnimatablePropertyLayer
@dynamic myProperty;
- (void)drawInContext:(CGContextRef)ctx {
... some custom drawing code based on "myProperty"
}
- (id <CAAction>)actionForKey:(NSString *)key {
if ([key isEqualToString:@"myProperty"]) {
CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:key];
theAnimation.fromValue = [[self presentationLayer] valueForKey:key];
... I want to do something special here, depending on both from and to values...
return theAnimation;
}
return [super actionForKey:key];
}
+ (BOOL)needsDisplayForKey:(NSString *)key {
if ([key isEqualToString:@"myProperty"])
return YES;
return [super needsDisplayForKey:key];
}
@end