¿Por qué mi captura de pantalla creada por progtwigción se ve tan mal en iOS 7?

Estoy tratando de implementar la aplicación para compartir con Facebook. Usé este código para tomar la captura de pantalla:

CGSize imageSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height); UIGraphicsBeginImageContext(imageSize); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

Funciona muy bien en iOS 6, pero en iOS 7 la imagen se ve muy mal. Utilicé esta respuesta: iOS: ¿cuál es la forma más rápida y efectiva de hacer una captura de pantalla mediante progtwigción? para tratar de solucionarlo, y me ayudó, aún la captura de pantalla se ve mal. La pantalla adquiere otro color y algunos objetos (como tags) no se muestran en la imagen tomada. ¿Alguna ayuda?

—-Actualizar—-

Logré resolver la mayoría de los objetos, cambiélos para retenerlos en lugar de debilitarlos. Mi principal problema sigue siendo mi tabla, que se muestra como un gran bloque blanco (se supone que es transparente, con tags con texto blanco, por lo que todo lo que vemos son glóbulos blancos). Intenté definir el fondo de la tabla como clearcolor, no ayuda …

—-Última actualización—

Aquí hay respuestas maravillosas que realmente no tienen que ver con mi problema. Quería hacerlo funcionar en dispositivos que funcionan con iOS7 pero sin usar iOS7 SDK, ya que lleva mucho esfuerzo cambiar el SDK del proyecto en este punto, cuando el proyecto está casi listo.

De todos modos, agregué la paz del código que finalmente resolvió mi problema:

Este cambio simplemente resuelve el problema:

 UIGraphicsBeginImageContextWithOptions(imageSize, NO , 0.0f); 

en lugar de:

 UIGraphicsBeginImageContext(imageSize); 

Se ha agregado una nueva API desde iOS 7, que debería proporcionar una forma eficiente de obtener una instantánea

  • snapshotViewAfterScreenUpdates: convierte la vista en una UIView con content no modificable

  • resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets : lo mismo, pero con resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets

  • drawViewHierarchyInRect:afterScreenUpdates: mismo si necesita que todas las subvistas se dibujen también (como tags, botones …)

Puede usar el UIView devuelto para cualquier efecto de IU, o renderizarlo en una imagen como lo hizo si necesita exportar.

No sé qué tan bueno es este nuevo método VS al que usted proporcionó (aunque recuerdo que los ingenieros de Apple dijeron que esta nueva API era más eficiente)

puedes intentar esto

 - (UIImage *) screenshot { UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale); [self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } 

en iOS 8 : esto es lo que estoy haciendo para obtener ScreenShot

  1. acaba de agregar un UIImageView y Método para tomar una captura de pantalla en el archivo .h

@property (débil, no atómica) IBOutlet UIImageView * imageView;

  -(IBAction)takeSnapShot:(id)sender; 

2 código añadido para tomar capturas de pantalla y establecer en UIImageView en el archivo .m

 - (IBAction)takeSnapShot:(id)sender { UIGraphicsBeginImageContext(self.view.bounds.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *snapShotImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); imageView.image = snapShotImage; } 
  1. a continuación está la salida que obtuve.

enter image description here

En iOS7 puedes tener fallas si usas

 [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES] 

durante la animación en curso. Establezca afterScreenUpdates = NO para deshacerse de fallas.

Asegúrate de que opaque esté configurado a NO