2016-05-23 92 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 
    } 
} 

任何解釋或替代方案會受到歡迎!

相關問題