是否可以从使用snapshotViewAfterScreenUpdates
创建的UIView获取UIImage?
从snapshotViewAfterScreenUpdates
返回的UIView在作为子视图添加时看起来很好,但以下内容会产生黑色图像:
UIView *snapshotView = [someView snapshotViewAfterScreenUpdates:YES];
UIImage *snapshotImage = [self imageFromView:snapshotView];
- (UIImage *)imageFromView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);
// [view.layer renderInContext:UIGraphicsGetCurrentContext()]; // <- same result...
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
当然可以在不依赖snapshotViewAfterScreenUpdates
:
UIImage *snapshotImage = [self imageFromView:someView];
不幸的是,在捕获复杂视图时,drawViewHierarchyInRect
无法与snapshotViewAfterScreenUpdates
的速度匹配。我希望从UIImage
创建的视图中获取snapshotViewAfterScreenUpdates
会更快,这可能吗?
答案 0 :(得分:20)
答案似乎是 NO ,Apple的documentation暗示了这一点:
如果要对快照应用图形效果(如模糊),请使用
drawViewHierarchyInRect:afterScreenUpdates:
方法 代替。
值得注意的是,来自WWDC13的在iOS上实现引导UI 会话列出snapshotViewAfterScreenUpdates
作为最快的方法,但在示例代码中使用drawViewHierarchyInRect
。