CALayer/CABasicAnimation不透明度动画缓存?
问题描述:
我有一个视图作为对话框出现,当我想从父视图中删除它时,我将其不透明度设置为动画。CALayer/CABasicAnimation不透明度动画缓存?
我用下面的代码通过一个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"];
这看起来在模拟器完美,但在设备上不是很顺畅。有没有什么办法来缓存动画(就像使用UIView转换缓存:YES)?
我敢肯定,这是非常简单的,但在搜索文档和CALayer类信息后,我找不到任何东西来缓存它。
答
您可以尝试设置layer.shouldRasterize = YES;
并查看是否改善了性能。
但是请注意,shouldRasterize
会在您的图层内容发生变化时立即减慢合成速度。所以你应该只对某个动画启用它,然后再禁用它。
谢谢你,这个伎俩,现在看起来很顺利,很好! – ThisDarkTao 2011-05-05 12:20:09
也有一个影子应用到UITextView里面,并且我也对该图层进行了光栅化处理,现在和丝绸一样光滑。再次感谢你! – ThisDarkTao 2011-05-05 12:31:52
太好了。我在我的答案中添加了一个警告,不要永久启用'shouldRasterize'。有一个原因是默认禁用的。 – 2011-05-05 13:25:47