当前位置:  开发笔记 > IOS > 正文

在同一个NavigationController下的两个ViewControllers之间翻转

如何解决《在同一个NavigationController下的两个ViewControllers之间翻转》经验,为你挑选了2个好方法。

我已经提到了这个问题以及关于视图/视图控制器转换的几个问题,但仍然找不到满意的答案.大多数解决方案建议翻转视图而不是视图控制器.但是,我的应用程序中的两个视图控制器具有完全不同的操作和实现逻辑,因此我避免将它们混合在一起.

在我的应用程序中,我有一个FrontViewController嵌入在NavigationController中的模态视图控制器.在视图上按下一个按钮后,模态视图控制器应该翻转BackViewController,反之亦然.我曾经尝试过以下方面FrontViewController:

let navi = UINavigationController(rootViewController: backController)
navi.modalPresentationStyle = .CurrentContext
navi.modalTransitionStyle = .FlipHorizontal
self.presentViewController(backController, animated: true, completion: nil)

这几乎和我想要的一样,除了翻转导航栏之外.此外,如果我关闭模态视图,只有堆栈顶部的视图控制器被解除,而我无法让正确的父/呈现控制器解除模态视图中的所有其他堆栈控制器.

因此,我还试图阻止的ViewController栈并使用transitionFromViewControllerFrontViewController使用相同的导航控制器代替:

self.navigationController!.addChildViewController(backController)
self.willMoveToParentViewController(nil)

self.navigationController!.transitionFromViewController(self, toViewController: backViewController, duration: 1, options: .TransitionFlipFromLeft, animations:  {}, completion: ({Bool -> Void in
    self.removeFromParentController()
    c.didMoveToParentViewController(self)
}))

然后我在执行时遇到了这个运行时错误: Parent view controller is using legacy containment in call to -[UIViewController transitionFromViewController:toViewController: duration:options:animations:completion:]

那么,如何在两个视图控制器之间进行转换同时防止它们保留在视图控制器堆栈中?



1> Johnykutty..:

您可以在推动视图控制器之前将自定义过渡添加到导航控制器层.

let transition = CATransition()
transition.duration = 0.3
transition.type = "flip"
transition.subtype = kCATransitionFromLeft
self.navigationController?.view.layer.addAnimation(transition, forKey: kCATransition)
self.navigationController?.pushViewController(viewController!, animated: false)

请注意,animated参数应该是false.否则将发生默认滑动动画



2> Kirit Modi..:

请参阅此演示:

flipAnimation的Swift代码:

let  mainStory = UIStoryboard(name: "Main", bundle: nil)
let search = mainStory.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController
UIView.beginAnimations("animation", context: nil)
UIView.setAnimationDuration(1.0)
self.navigationController!.pushViewController(search, animated: false)
UIView.setAnimationTransition(UIViewAnimationTransition.FlipFromLeft, forView: self.navigationController!.view, cache: false)
UIView.commitAnimations()

FlipViewController动画

输出:

在此输入图像描述

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有