uiview ios7 uiimage screenshot snapshot

UIImage desde una UIView creada con snapshotViewAfterScreenUpdates:



ios7 screenshot (1)

¿Es posible obtener un UIImage desde una UIView creada con snapshotViewAfterScreenUpdates ?

Un UIView devuelto por snapshotViewAfterScreenUpdates ve bien cuando se agrega como una subvista, pero lo siguiente produce una imagen negra:

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; }

Por supuesto, es posible obtener la imagen sin depender de snapshotViewAfterScreenUpdates :

UIImage *snapshotImage = [self imageFromView:someView];

Desafortunadamente, al capturar una vista compleja, drawViewHierarchyInRect no puede coincidir con la velocidad de snapshotViewAfterScreenUpdates . Esperaba que fuera más rápido obtener el UIImage desde una vista creada por snapshotViewAfterScreenUpdates , ¿es esto posible?


La respuesta parece ser NO y la documentación de Apple lo confirma implícitamente:

Si desea aplicar un efecto gráfico, como desenfoque, a una instantánea, utilice el drawViewHierarchyInRect:afterScreenUpdates: lugar.

Vale la pena señalar que la Implementación de IU Engaging en la sesión de iOS de WWDC13 enumera snapshotViewAfterScreenUpdates como el método más rápido, pero usa drawViewHierarchyInRect en el código de ejemplo.