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.