2011-05-05 122 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