【问题标题】:CALayer.opacity not animating inside CATransactionCALayer.opacity 在 CATransaction 内没有动画
【发布时间】:2014-08-15 21:58:20
【问题描述】:

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

[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 不适合这种类型的动画?

【问题讨论】:

    标签: animation core-animation calayer catransaction


    【解决方案1】:

    - (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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多