Анимация пользовательского свойства с помощью actionForKey :как получить новое значение свойства?

В подклассе 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
7
задан Eyal Redler 24 April 2012 в 13:29
поделиться