2011-05-21 4 views

Respuesta

31
UIView *view = // your view  
UIGraphicsBeginImageContext(view.bounds.size); 
[view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Esto le da a la imagen que se pueden almacenar usando -

NSData *imageData = UIImageJPEGRepresentation(image, 1.0); 
[imageData writeToFile:path atomically:YES]; 

donde ruta es la ubicación que desea guardar.

+0

lo siento, se puede saber más detalles acerca de este código ... tengo no hay idea de usarlo ... –

+3

La idea es generar un objeto 'UIImage' para la vista así que t que podemos guardarlo como una imagen. Para eso usamos un poco de 'Core Graphics'. Tomamos la capa de la vista (cada vista tiene una capa que representa el aspecto visual de la vista) y la dibujamos en un contexto de imagen (Imagine el contexto como un tablero de dibujo). Una vez que el dibujo está terminado, generamos el objeto 'UIImage' del contexto. Esto lo convertimos a datos en representación jpeg usando una función de marco 'UIImageJPEGRepresentation (image, 1.0)'. Tenga en cuenta que '1.0' es la calidad de la imagen que desea con '1.0' como el mejor –

+0

Una vez que tenemos un objeto 'NSData' usamos su método' writeToFile: atomically' para guardar la imagen en el archivo 'path' deseado. Espero que esto sea lo que estabas buscando. –

0

En MonoTouch/C# como un método de extensión:

public static UIImage ToImage(this UIView view) { 
    try { 
     UIGraphics.BeginImageContext(view.ViewForBaselineLayout.Bounds.Size); 
     view.Layer.RenderInContext(UIGraphics.GetCurrentContext()); 
     return UIGraphics.GetImageFromCurrentImageContext(); 
    } finally { 
     UIGraphics.EndImageContext(); 
    } 
} 
4

Aquí es un método rápido para hacer que cualquier UIView como imagen. Tiene en cuenta la versión de iOS en la que se ejecuta el dispositivo y utiliza el método pertinente para adquirir una representación de imagen de un UIView.

Más específicamente, ahora hay un mejor método (es decir, drawViewHierarchyInRect: afterScreenUpdates :) para tomar una captura de pantalla de un UIView en dispositivos que se ejecutan en iOS 7 o versiones posteriores, que es, por lo que he leído, considerado como forma más eficiente en comparación con el método "renderInContext".

Más información aquí: https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW217

Ejemplo de uso:

#import <QuartzCore/QuartzCore.h> // don't forget to import this framework in file header. 

UIImage* screenshotImage = [self imageFromView:self.view]; //or any view that you want to render as an image. 

CÓDIGO:

#define IS_OS_7_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 

- (UIImage*)imageFromView:(UIView*)view { 

    CGFloat scale = [UIScreen mainScreen].scale; 
    UIImage *image; 

    if (IS_OS_7_OR_LATER) 
    { 
     //Optimized/fast method for rendering a UIView as image on iOS 7 and later versions. 
     UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, scale); 
     [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; 
     image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
    } 
    else 
    { 
     //For devices running on earlier iOS versions. 
     UIGraphicsBeginImageContextWithOptions(view.bounds.size,YES, scale); 
     [view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
     image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
    } 
    return image; 
} 
Cuestiones relacionadas