2016-05-23 54 views
0

我正在做一个自定义视图控制器转换,其中呈现的视图控制器detailVC在解散时按比例缩小。snapshotViewAfterScreenUpdates返回iPhone上的空白图像,但不在iPad上

我选择的过程如下:

  1. 快照detailVC.view,将其添加到转型背景下的containerView
  2. 隐藏detailVC.view
  3. 比例放倒的快照。

下面的代码:

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是完全透明的。

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

有什么想法?

回答

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

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

相关问题