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];
}
放大作品,缩小作品。而是使用默认的淡出动画。
代码可能包含一些拼写错误,因为我是在另一台机器上输入的。
任何人都可以帮忙吗?