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
應該有助於提升性能,但實際上我看不到它在速度上是否有明顯的差異。
在這種情況下,如何加快快照上的渲染速度?細胞不能保證是任何特定的大小,所以不幸的是我不能使用預先渲染的圖像來僞造陰影效果。
這是一個很棒的提示!我認爲這對iOS 6來說運氣不佳? – SaltyNuts
我相信如此。雖然有一些關於繪畫表演的WWDC視頻;你可能想花一些時間與他們,看看他們是否提供任何有用的想法。 – matt