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