Swift: 如何将 presentViewController 动画修改为 push 动画
要将 presentViewController 动画修改为 push 动画,您需要进行以下步骤:\n\n1. 确保当前的视图控制器是嵌入在导航控制器中。如果不是,您需要将当前的视图控制器嵌入在导航控制器中,可以使用以下代码将当前的视图控制器包装在导航控制器中:\n\nswift\nlet navigationController = UINavigationController(rootViewController: currentViewController)\n\n\n2. 在需要进行 push 动画的地方,使用导航控制器的 pushViewController 方法进行视图控制器的切换。例如,如果您要将新的视图控制器推入导航控制器堆栈,并使用 push 动画,可以使用以下代码:\n\nswift\nnavigationController.pushViewController(newViewController, animated: true)\n\n\n3. 如果您想自定义 push 动画,可以遵循导航控制器的代理协议 UINavigationControllerDelegate,并实现 navigationController(_:animationControllerFor:from:to:) 方法来返回一个遵循 UIViewControllerAnimatedTransitioning 协议的自定义动画对象。然后,设置导航控制器的代理为当前视图控制器。\n\n例如,您可以创建一个自定义的动画类 CustomPushAnimator:\n\nswift\nclass CustomPushAnimator: NSObject, UIViewControllerAnimatedTransitioning {\n func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {\n return 0.3\n }\n \n func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {\n // 实现自定义的 push 动画逻辑\n }\n}\n\n\n然后,在当前视图控制器中设置导航控制器的代理,并返回自定义的动画对象:\n\nswift\nnavigationController.delegate = self\n\nextension CurrentViewController: UINavigationControllerDelegate {\n func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {\n if operation == .push {\n return CustomPushAnimator()\n }\n return nil\n }\n}\n\n\n通过以上步骤,您就可以将 presentViewController 动画修改为 push 动画,并且可以自定义 push 动画效果。请根据您的具体需求进行相应的修改。
原文地址: https://www.cveoy.top/t/topic/pKXC 著作权归作者所有。请勿转载和采集!