Core Animation では、CALayer ベースのクラスに actionForKey メソッドを実装することで、カスタム アニメーションを使用できます。
- (id<CAAction>)actionForKey:(NSString *)key {
// Custom animations
return [super actionForKey:key];
}
その後、アニメーションを作成し、それをonOrderIn
アクション (つまり、レイヤーが別のレイヤーに追加されたとき) に返すことができます。これはうまくいきます。同じことを行うとonOrderOut
(つまり、レイヤーがそのスーパーレイヤーから削除されます)、返されたアニメーションは無視され、代わりにデフォルトのアニメーションが適用されます。
私の目標は、レイヤーをズームイン ( onOrderIn
) およびズームアウト ( onOrderOut
) することです。
- (id<CAAction>)actionForKey:(NSString *)key {
if ([key isEqualToString:@"onOrderIn"] || [key isEqualToString:@"onOrderOut"]) {
CABasicAnimation *a = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
a.duration = 0.25;
a.removedOnCompletion = NO;
a.fillMode = kCAFillModeBoth;
if ([key isEqualToString:@"onOrderIn"]) {
a.fromValue = [NSNumber numberWithFloat:0.0];
a.toValue = [NSNumber numberWithFloat:1.0];
} else {
a.fromValue = [NSNumber numberWithFloat:1.0];
a.toValue = [NSNumber numberWithFloat:0.0];
}
return a;
}
return [super actionForKey:key];
}
ズームインは機能しますが、ズームアウトは機能しません。代わりに、デフォルトのフェードアウト アニメーションが使用されます。
別のマシンでこれを入力しているため、コードにはタイプミスが含まれている可能性があります。
誰でも助けることができますか?