cómo tomar una captura de pantalla del iPhone programáticamente?

¿Es posible en el objective C que podamos tomar la captura de pantalla y almacenar esta imagen en UIImage?

Necesita crear un contexto de bitmap del tamaño de su pantalla y usar

[self.view.layer renderInContext:c] 

para copiar tu vista en él. Una vez hecho esto, puede usar

 CGBitmapContextCreateImage(c) 

para crear una CGImage desde tu contexto.

Elaboración :

 CGSize screenSize = [[UIScreen mainScreen] applicationFrame].size; CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); CGContextRef ctx = CGBitmapContextCreate(nil, screenSize.width, screenSize.height, 8, 4*(int)screenSize.width, colorSpaceRef, kCGImageAlphaPremultipliedLast); CGContextTranslateCTM(ctx, 0.0, screenSize.height); CGContextScaleCTM(ctx, 1.0, -1.0); [(CALayer*)self.view.layer renderInContext:ctx]; CGImageRef cgImage = CGBitmapContextCreateImage(ctx); UIImage *image = [UIImage imageWithCGImage:cgImage]; CGImageRelease(cgImage); CGContextRelease(ctx); [UIImageJPEGRepresentation(image, 1.0) writeToFile:@"screen.jpg" atomically:NO]; 

Tenga en cuenta que si ejecuta su código en respuesta a un clic en un UIButton, su imagen mostrará ese botón presionado.

El código anterior supone que la vista que se va a capturar vive en la pantalla principal … es posible que no.

¿Esto funcionaría para capturar siempre el contenido de la ventana principal? (advertencia: comstackdo en StackOverflow)

 - (UIImage *) captureScreen { UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; CGRect rect = [keyWindow bounds]; UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); [keyWindow.layer renderInContext:context]; UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return img; }