加速转场和放松转场
Posted
技术标签:
【中文标题】加速转场和放松转场【英文标题】:Speed up segues and Unwind segues 【发布时间】:2020-03-11 18:54:20 【问题描述】:我正在尝试加快视图控制器之间的转场和展开转场。如果我做错了什么,请告诉我,或者我是否需要上传更多代码以获取上下文。
这是一个错误的 youtube 演示:https://www.youtube.com/watch?v=VZsAg0L-W5g&feature=youtu.be
基本上,当我单击“查看 AR”时,进入 AR 视图控制器需要一点时间
其次,当我尝试展开到“CollectionView 控制器”时,再次展开到前一个控制器的时间太长了。
我还必须记住内存,因为这是一个非常占用内存的应用程序。
欢迎任何帮助!!!!
这是第一个视图控制器的转场:
@objc private func ViewAR(_ sender: UIButton)
imagesOne = nil
imagesTwo = nil
imagesThree = nil
imagesFour = nil
imagesFive = nil
//goToAR
self.performSegue(withIdentifier: "goToAR", sender: self)
正如您在上面看到的,我将图像设置为 nil 以用于存储目的,然后转到 AR 视图控制器
这是第二个视图控制器的展开转场:
@objc private func closeController(_ sender: UIButton)
DispatchQueue.main.async
self.sceneView.removeFromSuperview()
self.performSegue(withIdentifier: "unwindToSwipe", sender: self)
【问题讨论】:
您应该能够使用自定义 segue(即UIStoryboardSegue
的子类)来完成此操作,这使您可以完全控制过渡的完成方式以及过渡动画需要多长时间(甚至根本不使用动画)。
@Rudedog 感谢您的回复!我想知道这会解决这个问题还是这个问题更多地与要在 segue 之前执行的代码有关?
延迟几乎肯定不是因为“segue”——而是因为你正在设置新的视图控制器。要进行测试,添加一个新的普通视图控制器并将您的 performSegue(withIdentifier: "goToAR", sender: self)
更改为 performSegue(withIdentifier: "goToTest", sender: self)
看看会发生什么。很有可能,它会很快。
@DonMag 是的,速度更快。所以问题在于我的代码在 segue 之前做了什么?
@mick1996 - 听起来像。您可能想要做的是找出准备 AR VC 所需的最小值,并显示某种类型的进度/活动指示器...然后,在viewDidAppear()
中,您可以运行使该 VC 正常运行所需的实际代码。
【参考方案1】:
大家好,在 cmets 的帮助下,我了解到问题不在于 segue,而在于代码本身。
我必须使用 viewWillAppear 之类的代码
来源:https://developer.apple.com/documentation/uikit/uiviewcontroller/1621510-viewwillappear
【讨论】:
【参考方案2】:停止使用 segues , 开始使用 self.NavigationController.push(vc) 这确实是最好的导航方式。
【讨论】:
通过代码使用.push(vc)
不比使用segues更好...如果您查看OP链接的视频,他正在使用present ,而不是推...即使他正在推入导航控制器堆栈,编码.push
而不是使用segue对他的问题的影响为零。跨度>
以上是关于加速转场和放松转场的主要内容,如果未能解决你的问题,请参考以下文章