我正在将 a 的内容捕获UIView
到UIImage
using 中view.layer renderInContext:UIGraphicsGetCurrentContext()
。视图是UICollectionView
,我通过以下方式为每个单元格添加了阴影:
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 毫秒变为有 3px 阴影的整整 2 秒!
我已阅读该设置layer.shadowPath
应该有助于提高性能,但实际上无论是否设置,我都没有看到任何明显的速度差异。
在这种情况下,我能做些什么来加快快照的渲染速度?这些单元格不能保证是任何特定的大小,所以很遗憾我不能使用预渲染的图像来伪造阴影效果。