使用snapshotViewAfterScreenUpdates创建的UIView的UIImage:

时间:2013-11-25 21:26:57

标签: uiview ios7 uiimage screenshot snapshot

是否可以从使用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会更快,这可能吗?

1 个答案:

答案 0 :(得分:20)

答案似乎是 NO ,Apple的documentation暗示了这一点:

  

如果要对快照应用图形效果(如模糊),请使用drawViewHierarchyInRect:afterScreenUpdates:方法   代替。

值得注意的是,来自WWDC13的在iOS上实现引导UI 会话列出snapshotViewAfterScreenUpdates作为最快的方法,但在示例代码中使用drawViewHierarchyInRect