0

我正在尝试CALayer使用 a为 a 的不透明度变化设置动画CATransaction,但它不起作用:

[CATransaction begin];
[CATransaction setAnimationDuration:3];
[CATransaction setCompletionBlock:^{
    NSLog(@"ENTERING COMPLETION BLOCK");
}];
NSLog(@"BEGINNING TRANSACTION");
self.opacity = 1;
[CATransaction commit];

进入此代码的不透明度为 0,没有动画。它会立即更改,尽管在完成块显示消息“正在输入完成块”之前事务确实需要 3 秒,正如预期的那样。我知道这种类型的动画不适用于视图的主层,但这里不是这种情况。

如果您想知道,我使用的是 aCATransaction而不是 a CABasicAnimation,因为 (1) 我发现代码更易于阅读(和编写),并且 (2) 它使用完成块使链接更容易执行(虽然我'这里不这样做)。

是否有一些我不知道的原因使CATransaction这种类型的动画不适合?

4

1 回答 1

0

似乎图层 - (id<CAAction>)actionForKey:(NSString *)key不再为其可动画属性返回默认动画

您可以通过继承 aCALayer并覆盖该方法来解决此问题。像这样的东西:

- (id<CAAction>)actionForKey:(NSString *)key {
    if ([key isEqualToString:@"opacity"]) {
       return [CABasicAnimation animationWithKeyPath:key]
    }
   return nil
 }

或者,如果您可以使用图层委托方法:- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)key

于 2014-09-19T04:06:19.780 回答