SnapshotViewAfterScreenUpdates glitch en iOS 8
objective-c ios8 (3)
Acabo de tener este problema.
La razón fue que no tenía imágenes de lanzamiento adecuadas para iPhone 6 ni 6 más. Otro problema que vi debido a esta imagen no existente fue que obtuve el tamaño para el iPhone 5 cuando pregunté los límites del tamaño de la pantalla de esta manera:
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
Cuando arreglé estas imágenes, este problema se solucionó.
PD: debería funcionar si utiliza un catálogo de activos o un archivo de plumilla para la imagen de inicio. En el catálogo de activos, debe agregar la ''V'' en el lado derecho (Inspector de atributos) en iOS 8 y versiones posteriores, y configurar las imágenes para '' Retina HD 5.5 '' (para 6 más) y '' Retina HD 4.7 '' (para iPhone 6)
He notado que ejecutar esto causaría que la vista (o la ventana principal, no estoy seguro) cambie de tamaño por un momento, cuando se ejecuta en un simulador de iPhone 6/6 + escalado desde la disposición del iPhone 5 (sin pasar la imagen de inicio para iPhone 6/6 +):
[self.view snapshotViewAfterScreenUpdates:YES];
¿Alguna idea de cómo hacer que funcione cuando no puedes pasar ''NO'' allí?
Actualización (13 de julio):
Parece que ya no se reproduce en iOS 8.4.
Como parecía un problema de Apple / API, decidí no usar ese método cuando necesito aprobar un "SÍ".
Puede simplemente tomar una captura de pantalla (UIImage) de su vista y colocarla en un UIImageView para que actúe como la "UIView" que usó para obtener el método de instantáneas.
Aquí hay un enlace para el código: Cómo capturar UIView a UIImage sin pérdida de calidad en la pantalla retina
#import <QuartzCore/QuartzCore.h>
+ (UIImage *) imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
Parece que @anon y @PJC tienen razón y ese es un error de UIKit. A veces puede ser solucionado por [view.layer renderInContext:UIGraphicsGetCurrentContext()]
En este punto, resolví el problema yo mismo ajustando manualmente los diseños para iPhone 6 / 6+, ya que en las resoluciones de dispositivos nativos el problema no se reproduce.