ios objective-c ios8 iphone-6

ios - Métodos de instantáneas rotos en iPhone 6 dispositivo y simulador



objective-c ios8 (3)

Estamos viendo este mismo problema cuando ejecutamos el siguiente código:

[window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];

La única solución que hemos encontrado hasta ahora es asegurarnos de que la aplicación tenga imágenes de lanzamiento para el iPhone 6 y 6+ y luego ya no tengamos el parpadeo.

Por alguna razón desconocida, parece haber un posible error con todos los métodos de captura de pantalla en el simulador (y dispositivo) del iPhone 6. Cada vez que llamo a cualquiera de los métodos de captura de pantalla, incluyendo:

snapshotViewAfterScreenUpdates: resizableSnapshotViewFromRect: drawViewHierarchyInRect:

con afterScreenUpdates establecido en YES, la pantalla parpadea. Si se establece en NO, no se produce ningún parpadeo, pero no puedo obtener la funcionalidad que necesito.

Estos métodos funcionan bien tanto con iOS7.1 como con iOS8 en todos los demás simuladores, a excepción del iPhone 6 y 6+.

Por extraño que parezca, si comienzo un nuevo proyecto utilizando guiones gráficos e intento un código similar, no puedo reproducir el parpadeo. He adjuntado un gif del parpadeo usando mi proyecto sin guión gráfico:

Y aquí está el controlador de vista muy simple:

@implementation TestSnapshotController - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Snap" style:UIBarButtonItemStylePlain target:self action:@selector(_snap)]; self.blueView = [UIView new]; self.blueView.backgroundColor = [UIColor blueColor]; self.blueView.frame = CGRectMake(100.0f, 100.0f, 100.0f, 100.0f); [self.view addSubview:self.blueView]; } - (void)_snap { [self.blueView snapshotViewAfterScreenUpdates:YES]; } @end

Y aquí está mi AppDelegate por si acaso:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; TestSnapshotController *testVC = [TestSnapshotController new]; UINavigationController *rootNavVC = [[UINavigationController alloc] initWithRootViewController:testVC]; self.window.rootViewController = rootNavVC; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES; }

Cualquier ayuda sería muy apreciada!


Parece ser un error en el lado de Apple que se produce en aplicaciones escaladas (aquellas que no tienen soporte de diseño / activos / diseño para iPhone 6/6 +) Esto me ayudó a superarlo : snapshotViewAfterScreenUpdates glitch en iOS 8

Básicamente utiliza: [view.layer renderInContext:UIGraphicsGetCurrentContext()];


Siguiendo con la solución de Ryans, agregué una pantalla de inicio xib (o guión gráfico) y esto resolvió el problema en el iPhone 6 y 6 más.

Así que asegúrate de tenerlo configurado en la configuración de tu proyecto, debería terminar buscando algo como esto: