UIImage from a UIView created with snapshotViewAfterScreenUpdates:

ios7, screenshot, snapshot, uiimage, uiview

Solution

The answer seems to be NO and Apple's documentation implicitly confirms this:

If you want to apply a graphical effect, such as blur, to a snapshot, use the `drawViewHierarchyInRect:afterScreenUpdates:` method instead.

It's worth noting that the Implementing Engaging UI on iOS session from WWDC13 lists `snapshotViewAfterScreenUpdates` as the fastest method, but uses `drawViewHierarchyInRect` in the example code.

Problem

Is it possible to get a UIImage from a UIView created with `snapshotViewAfterScreenUpdates`? A UIView returned from `snapshotViewAfterScreenUpdates` looks fine when added as a subview, but the following produces a black image: ``` 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; } ``` It is of course possible to get the image without relying on `snapshotViewAfterScreenUpdates`: ``` UIImage *snapshotImage = [self imageFromView:someView]; ``` Unfortunately, when capturing a complex view, `drawViewHierarchyInRect` can't match the speed of `snapshotViewAfterScreenUpdates`. I was hoping that it would be faster to get the `UIImage` from a view created by `snapshotViewAfterScreenUpdates`, is this possible?

Original source