我正在尝试使用CALayer
设置CATransaction
的不透明度的变化动画,但它不起作用:
[CATransaction begin];
[CATransaction setAnimationDuration:3];
[CATransaction setCompletionBlock:^{
NSLog(@"ENTERING COMPLETION BLOCK");
}];
NSLog(@"BEGINNING TRANSACTION");
self.opacity = 1;
[CATransaction commit];
此代码中的0不透明度不会生成动画。它会立即更改,尽管事务确实需要3秒才能在完成块显示消息“输入完成块”之前,如预期的那样。我知道这种类型的动画不适用于视图的主层,但这不是这种情况。
如果你想知道,我使用CATransaction
而不是CABasicAnimation
因为(1)我发现代码更容易阅读(和写),以及(2)它使用完成块使链接更容易(我不是在这里做)。
是否有一些原因我不知道这会使CATransaction
成为这类动画的不良候选者?
答案 0 :(得分:0)
图层- (id<CAAction>)actionForKey:(NSString *)key
似乎不再为其动画属性返回默认动画
您可以通过继承CALayer
并覆盖该方法来解决此问题。像这样:
- (id<CAAction>)actionForKey:(NSString *)key {
if ([key isEqualToString:@"opacity"]) {
return [CABasicAnimation animationWithKeyPath:key]
}
return nil
}
或者,如果您可以使用图层委托方法:- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)key