在iOS10上,snapshotView在完全呈现视图之前拍摄快照

fra*_*ish 6 uiviewcontroller uinavigationcontroller uiviewanimationtransition ios ios10

我完全透明的桌子和导航控制器.因此,在推送新视图控制器时,动画被破坏了.因此,我添加了自己的自定义推送转换,该转换获取下一个视图控制器的快照并为其设置动画.

这不再适用于iOS10.snapshotView(afterScreenUpdates: true)返回纯白色的视图.我也尝试通过图形上下文使用旧方法获取快照,但它也不起作用.

如何确保在snapshotView之前加载推送到导航控制器的视图?或者有更好的方法来解决这个问题吗?不幸的是,这对我来说是一个突破性的变化.

Han*_*ney 8

我想说这是严格的iPhone 7模拟器和iPhone 7+模拟器问题.该问题不会出现在真实设备上.如果您需要为模拟器修复此问题,请参阅我在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;
}
Run Code Online (Sandbox Code Playgroud)


Beb*_*ing 2

这个扩展应该可以解决这个问题

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)
    }
}
Run Code Online (Sandbox Code Playgroud)