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

时间:2016-09-18 10:31:57

标签: ios uiviewcontroller uinavigationcontroller ios10 uiviewanimationtransition

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

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

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

此扩展程序应解决问题

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)
    }
}