2014-03-26 22 views
0

我使用view.layer renderInContext:UIGraphicsGetCurrentContext()UIView的內容捕獲到UIImage中。該視圖是UICollectionView我已經以以下方式添加陰影給每個小區:帶陰影的UIView - 應用renderInContext時很慢

cell.layer.masksToBounds = NO; 
cell.layer.shadowOpacity = 0.75f; 
cell.layer.shadowRadius = 3.0f; 
cell.layer.shadowOffset = CGSizeZero; 
cell.layer.shadowPath = [UIBezierPath bezierPathWithRect:cell.bounds].CGPath; 
cell.layer.shouldRasterize = YES; 

轉換到UIImage去如下:

UIGraphicsBeginImageContextWithOptions(view.frame.size, 0, 0); 
[view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

麻煩的是,雖然電池的初始顯示似乎足夠快,當我捕捉視圖的快照時,陰影的添加會使性能減慢10-30倍,具體取決於陰影半徑。在iPad 2上,它從70毫秒沒有陰影,到3秒陰影的全部2秒!

我讀過設置layer.shadowPath應該有助於提升性能,但實際上我看不到它在速度上是否有明顯的差異。

在這種情況下,如何加快快照上的渲染速度?細胞不能保證是任何特定的大小,所以不幸的是我不能使用預先渲染的圖像來僞造陰影效果。

回答

1

renderInContext:慢。這就是iOS 7添加UIView快照方法的原因(如snapshotViewAfterScreenUpdates:)。儘可能使用它們;他們要快得多。

+0

這是一個很棒的提示!我認爲這對iOS 6來說運氣不佳? – SaltyNuts

+0

我相信如此。雖然有一些關於繪畫表演的WWDC視頻;你可能想花一些時間與他們,看看他們是否提供任何有用的想法。 – matt