Базовая анимация позволяет создавать собственные анимации путем реализации метода actionForKey в вашем классе на основе CALayer:
- (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];
}
Увеличение работает, уменьшение - нет. Вместо этого используется анимация затухания по умолчанию.
Код может содержать некоторые опечатки, так как я набираю это на другом компьютере.
Может кто-нибудь помочь?