如何将 UInavigationcontroller 动画与库 Motion 一起使用?

Posted

技术标签:

【中文标题】如何将 UInavigationcontroller 动画与库 Motion 一起使用?【英文标题】:How to use the UInavigationcontroller animation with library Motion? 【发布时间】:2018-07-20 07:23:04 【问题描述】:

我在 GitHub 上发现了一个名为 Motion 的库,它提供了视图和控制器的转换集。 根据网站,要在导航控制器上使用动画,我们需要创建一个新的导航控制器类,如下所示,我应用新的导航控制器。但是当它失败并且没有推送到新的视图控制器时。

GitHub 链接是https://github.com/CosmicMind/Motion

class AppNavigationController: UINavigationController 
    open override func viewDidLoad() 
        super.viewDidLoad()
        isMotionEnabled = true
        motionNavigationTransitionType = .zoom
    

然后在主视图上:

let navigation = AppNavigationController()
navigation.pushViewController(newViewController, animated: false)

【问题讨论】:

【参考方案1】:

如果您在整个应用程序中使用Motion 的动画NavigationController,您可以在AppDelegatedidFinishLaunchingWithOptions 方法中这样设置。

let newViewController = NewViewController(nibName: "NewViewController",bundle: nil)
let navigation = AppNavigationController(rootViewController: newViewController!)
self.window?.rootViewController = navigation
self.window?.makeKeyAndVisible()

更新: 如果你想创建一个单独的NavigationController 并将特定的UIViewController 推送给它,那么你需要呈现导航控制器而不是推送它。见下文。

let motionNavController = AppNavigationController(rootViewController: galleryViewController)
motionNavController.motionNavigationTransitionType = .none
motionNavController.isNavigationBarHidden = true
self.present(motionNavController, animated: true, completion: nil)

【讨论】:

我可以只制作特定的视图控制器并使用过渡导航吗?你的方法不太适合我是因为我的 rootviewcontroller 不是以编程方式创建的 在这种情况下,您应该展示 NavigationController 而不是推送它。只能推送 UIViewControllers。检查下面的代码。 let motionNavController = AppNavigationController(rootViewController: newViewController) motionNavController.motionNavigationTransitionType = .none motionNavController.isNavigationBarHidden = true self.present(motionNavController, animated: true, completion: nil)

以上是关于如何将 UInavigationcontroller 动画与库 Motion 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

ID:[...] 的 NSManagedObject 已失效

带有标签栏的 presentViewController

在 UINavigationController 中设置时图像不显示

UINavigationController - 何时释放推送的视图控制器等

使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?

为啥我似乎必须在 iOS 应用程序委托中键入 window.rootViewController?