popViewController(animated: true) 动画运行缓慢
Posted
技术标签:
【中文标题】popViewController(animated: true) 动画运行缓慢【英文标题】:popViewController(animated: true) animation works slow 【发布时间】:2018-08-15 10:58:07 【问题描述】:我在 imageView 上添加了一个点击手势识别器,所以当用户点击下面的图片时会调用下面的函数。
@objc func handleTap(_ sender: UITapGestureRecognizer)
self.navigationController?.popViewController(animated: true)
当我推送到细节视图控制器动画看起来很好并且工作流畅,但是当我使用上面的方法来 popViewController(animated: true) 动画不是那么流畅,甚至可能会冻结一秒钟。
我还使用 viewWillAppear 和 viewWillDisappear 方法在细节视图控制器中隐藏导航栏。我已经读到这可能会导致动画运行缓慢,但仍然无法找到解决此问题的答案。
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
navigationController?.isNavigationBarHidden = true
override func viewDidDisappear(_ animated: Bool)
super.viewWillAppear(animated)
navigationController?.isNavigationBarHidden = false
【问题讨论】:
分配navigationController?.isNavigationBarHidden
对性能的影响不大。我的应用程序可以顺利完成许多这样的任务。一些影响您的 UI 的工作将启动或结束相机会话、初始化 GMSMapView 等。您能否使用您的 View Controller 类的完整代码更新帖子,以便其他人可以重现您的错误并找到适合您情况的更好的解决方案。
这很奇怪,因为当我为 popViewController 使用自定义动画时,因此将默认动画设置为 false 一切都可以正常使用自定义动画。
【参考方案1】:
试试这个,我不确定,但它可能会工作
DispatchQueue.main.async
self.navigationController?.popViewController(animated: true)
【讨论】:
试过了,对我不起作用。不过还是谢谢。【参考方案2】:在您覆盖viewDidDisappear(_ animated: Bool)
时,您调用super.viewWillAppear(animated)
。正如您现在可能已经知道的那样,您应该调用super.viewDidDisappear(animated)
。您更正后的代码应为:
override func viewDidDisappear(_ animated: Bool)
super.viewDidDisappear(animated)
navigationController?.isNavigationBarHidden = false
【讨论】:
以上是关于popViewController(animated: true) 动画运行缓慢的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有警告和错误的闭包内使用 navigationController?.popViewController(animated: true)?
popViewController Animated:自定义过渡动画?
我可以“卷曲”popViewController Animated 上的页面吗?
popViewController Animated 不工作,但后退按钮工作
popViewController Animated 的断断续续的动画:来自警报 View:didDismissWithButtonIndex: