加速转场和放松转场

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对他的问题的影响为零。跨度>

以上是关于加速转场和放松转场的主要内容,如果未能解决你的问题,请参考以下文章

[数字媒体] PR视频剪辑之自定义音频视频加速转场和特显停顿

放松转场动作的第二场转场

Splitview 转场和展开

如何在展开的转场中找出哪个转场称为目的地?

swift自定义转场动画(比较有难度)

使用转场动画构造侧滑