私が取り組んでいる CALayer サブクラスには、自動的にアニメーション化したいカスタム プロパティがあります。つまり、プロパティが「myProperty」と呼ばれると仮定すると、次のコードが必要です。
[myLayer setMyProperty:newValue];
現在の値から「newValue」へのスムーズなアニメーションを発生させます。
actionForKey: と needsDisplayForKey: (次のコードを参照) をオーバーライドするアプローチを使用して、古い値と新しい値の間を単純に補間するだけで、非常にうまく動作させることができました。
私の問題は、プロパティの現在の値と新しい値の両方に応じて、わずかに異なるアニメーションの継続時間またはパス (または何でも) を使用したいことであり、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