我正在进行自定义视图控制器转换,其中呈现的视图控制器detailVC
在被解除时按比例缩小。
我选择的程序如下:
detailVC.view
,将其添加到转化背景' s containerView
detailVC.view
以下是代码:
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
是当前可见的视图控制器!
有什么想法?
答案 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
}
}
欢迎任何解释或替代方案!