snapshotViewAfterScreenUpdates在iPhone上返回空白图像,但在iPad上不返回

时间:2016-05-23 17:09:26

标签: ios uiviewcontroller

我正在进行自定义视图控制器转换,其中呈现的视图控制器detailVC在被解除时按比例缩小。

我选择的程序如下:

  1. 快照detailVC.view,将其添加到转化背景' s containerView
  2. 隐藏detailVC.view
  3. 缩小快照。
  4. 以下是代码:

    func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
    
        let detailVC = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) as? DetailViewController
    
        containerView.addSubview(detailVC.view)
        detailVC.view.frame = containerView.frame
    
        let detailVCSnapshot = detailVC.view.snapshotViewAfterScreenUpdates(true)
        containerView.addSubview(detailVCSnapshot)
    
        detailVC.view.hidden = true
        ...
    }
    

    奇怪的是,这适用于iPad,但不适用于iPhone。在iPhone上,detailVCSnapshot完全透明。

    其他答案(12)建议确保已绘制视图,但事实确实如此,因为detailVC是当前可见的视图控制器!

    有什么想法?

1 个答案:

答案 0 :(得分:1)

我找到了一个涉及在iPhone上使用UIGraphicsGetImageFromCurrentImageContext的解决方法:

let detailVCSnapshot = isIphone ? UIImageView(image: detailVC.view.snapshotImage) : detailVC.view.snapshotViewAfterScreenUpdates(true)

private extension UIView {
    var snapshotImage: UIImage {
        UIGraphicsBeginImageContextWithOptions(bounds.size, true, 0)
        layer.renderInContext(UIGraphicsGetCurrentContext()!)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
}

欢迎任何解释或替代方案!