我必须推送一个具有α为0.5的调光视图的viewController。因此,ViewController的视图必须显示此调光背景背后的前一个控制器视图。问题是我正在使用一个使用UIViewControllerAnimatedTransitioning协议的navigationController来自定义动画。默认情况下,在将新viewController推入堆栈后,navigationController会自动删除以前的视图。那么,如何在完成此转换后保留上一个视图,这可能吗?
注意:我不想只是将控制器的视图添加到navigationController(这给了我导航功能中的奇怪行为),我确实需要以这种方式推送它,所以我可以继续使用该应用程序代码模式。
CODE:
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
if isPresenting {
let ContainerView = transitionContext.containerView()
if let PresentedController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) {
if let PresentedView = transitionContext.viewForKey(UITransitionContextToViewKey) {
PresentedView.alpha = 0
PresentedView.frame = transitionContext.finalFrameForViewController(PresentedController)
ContainerView.addSubview(PresentedView)
// i've also tried to add the fromView in the containerView.
UIView.animateWithDuration(0.4, animations: {
PresentedView.alpha = 1
}) {
Completion in
transitionContext.completeTransition(Completion)
}
}
}
} else {
// dismiss code...
}
}
感谢您的耐心等待。
答案 0 :(得分:0)
捕获快照:
UIImage *snapshotImage = nil;
UIGraphicsBeginImageContextWithOptions(self.tabBarController.view.frame.size, NO, 0.0);
if ([self.tabBarController.view drawViewHierarchyInRect:self.tabBarController.view.bounds afterScreenUpdates:YES]) {
snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
您可以为此捕获transitionContext.containerView。将此图像传递给新VC,并将其设置为该VC视图的背景:
self.view.backgroundColor = [UIColor colorWithPatternImage:self.bgImage];
P.S。我不熟悉Swift所以你必须将代码转换为快速自己,但希望这给你一个不错的起点