0

我正在将 a 的内容捕获UIViewUIImageusing 中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应该有助于提高性能,但实际上无论是否设置,我都没有看到任何明显的速度差异。

在这种情况下,我能做些什么来加快快照的渲染速度?这些单元格不能保证是任何特定的大小,所以很遗憾我不能使用预渲染的图像来伪造阴影效果。

4

1 回答 1

1

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

于 2014-03-26T15:49:01.747 回答