CALayer.opacity 在 CATransaction 内没有动画
Posted
技术标签:
【中文标题】CALayer.opacity 在 CATransaction 内没有动画【英文标题】:CALayer.opacity not animating inside CATransaction 【发布时间】:2014-08-15 21:58:20 【问题描述】:我正在尝试使用 CATransaction
为 CALayer
的不透明度变化设置动画,但它不起作用:
[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
不适合这种类型的动画?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于CALayer.opacity 在 CATransaction 内没有动画的主要内容,如果未能解决你的问题,请参考以下文章
NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记