CALayer/CABasicAnimation不透明度动画缓存?

Thi*_*Tao 3 iphone core-animation objective-c

我有一个显示为对话框的视图,当我希望它从父视图中删除时,我正在设置其不透明度.

我正在使用以下代码通过CABasicAnimation更改其不透明度:

CALayer *opacityOutLayer = sheetView.layer;
CABasicAnimation *fadeOutAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeOutAnimation.fromValue = [NSNumber numberWithFloat:1.0];
fadeOutAnimation.toValue = [NSNumber numberWithFloat:0.0];
fadeOutAnimation.duration = 0.255;
[opacityOutLayer addAnimation:fadeOutAnimation forKey:@"opacity"];
Run Code Online (Sandbox Code Playgroud)

这在模拟器中看起来很完美,但在设备上却不是很流畅.有没有办法缓存动画(比如使用UIView转换缓存:是)?

我确定这很简单,但在搜索文档和CALayer类信息后,我找不到任何缓存它的东西.

Ole*_*ann 6

您可以尝试设置layer.shouldRasterize = YES;并查看是否可以提高性能.

但请注意,shouldRasterize一旦图层内容发生变化,这将大大减慢合成速度.因此,您应该只为某个动画启用它,然后再次禁用它.

  • 大.我已经在我的答案中添加了一个警告,即永久不启用`shouldRasterize`.有一个原因它默认是禁用的. (2认同)