2011-05-05 118 views
3

我有一个视图作为对话框出现,当我想从父视图中删除它时,我将其不透明度设置为动画。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类信息后,我找不到任何东西来缓存它。

回答

6

您可以尝试设置layer.shouldRasterize = YES;并查看是否改善了性能。

但是请注意,shouldRasterize会在您的图层内容发生变化时立即减慢合成速度。所以你应该只对某个动画启用它,然后再禁用它。

+0

谢谢你,这个伎俩,现在看起来很顺利,很好! – ThisDarkTao 2011-05-05 12:20:09

+0

也有一个影子应用到UITextView里面,并且我也对该图层进行了光栅化处理,现在和丝绸一样光滑。再次感谢你! – ThisDarkTao 2011-05-05 12:31:52

+2

太好了。我在我的答案中添加了一个警告,不要永久启用'shouldRasterize'。有一个原因是默认禁用的。 – 2011-05-05 13:25:47