En iOS10 snapshotView toma una instantánea antes de que la vista se renderice completamente

Tengo una tabla completamente transparente y controlleres de navigation. Debido a esto, al impulsar nuevos controlleres de vista, la animation se rompió. Por lo tanto, agregué mi propia transición de inserción personalizada que toma una instantánea del siguiente controller de vista y lo anima.

Esto ya no funciona en iOS10. snapshotView(afterScreenUpdates: true) devuelve una vista que es de color blanco puro. También intenté get la instantánea con el método antiguo a través del context de charts y tampoco funcionó.

¿Cómo puedo estar seguro de que la vista que se está enviando al controller de navigation se carga antes de snapshotView? ¿O hay una mejor manera de resolver esto? Este es un cambio rotundo para mi desafortunadamente …

Quiero decir que este es estrictamente un simulador de iPhone 7 y un simulador de iPhone 7+. El problema no aparecerá en un dispositivo real. Si necesita arreglar esto para el simulador aquí hay un trabajo que encontré en Pod: https://github.com/NewAmsterdamLabs/ZOZolaZoomTransition/

 - (UIImage *)zo_snapshot { UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, [UIScreen mainScreen].scale); CGContextRef context = UIGraphicsGetCurrentContext(); [self.layer renderInContext:context]; UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return snapshot; } 

Esta extensión debería solucionar el problema.

 extension UIView { /// Replacement of `snapshotView` on iOS 10. Fixes the issue of `snapshotView` returning a blank white screen. func snapshotImageView() -> UIImageView? { UIGraphicsBeginImageContext(bounds.size) guard let context = UIGraphicsGetCurrentContext() else { return nil } layer.render(in: context) let viewImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return UIImageView(image: viewImage, highlightedImage: viewImage) } }