ios - 并不可怕的Segues

标签 ios swift uistoryboardsegue

在我的主菜单上,我有一个简单的按钮布局和几个在背景中移动的 Sprite ,以使其更具交互性。当我第一次运行它时,一切都很好, Sprite 移动得很顺利,如果我点击菜单的一个按钮,一个自定义的 segue 就会被调用,下一个 View Controller 就会按照我想要的方式呈现。然后我可以按下后退按钮,再次显示菜单,一切(大部分)都很好。

但是,如果我重复此过程(向导航系统发送垃圾邮件),转场仍然有效,但最终菜单页面上的 Sprite 开始滞后并以急剧跳跃而不是平滑滑动的方式移动。所以我认为我的 segue 实现有问题

示例代码:

class SegueFromLeft: UIStoryboardSegue {
    override func perform() {
        let src = self.source
        let dst = self.destination

        if let c = src as? LSViewController {
            if let d = dst as? LSViewController {
                d.page = (c.page + c.header.count - 1) % c.header.count
            }
        }

        src.view.superview?.insertSubview(dst.view, aboveSubview: src.view)
        dst.view.transform = CGAffineTransform(translationX: -src.view.frame.size.width, y: 0)

        UIView.animate(withDuration: 0.25,
                   delay: 0.0,
                   options: UIViewAnimationOptions.curveEaseInOut,
                   animations: {
                    dst.view.transform = CGAffineTransform(translationX: 0, y: 0)
        },
                   completion: { finished in
                    src.present(dst, animated: false, completion: nil) }
        )
    }
}

我处理过渡的方式有问题吗,或者问题出在其他地方(如果是,可能的原因是什么)?

更新:所以我将 SKScenes 附加到每个 View Controller 。这就是我附加 Sprite 的地方。我认为这与它有关...

最佳答案

这里的问题是您没有在转场之前关闭 SKScenes。他们实际上只是在后台继续运行。要解决此问题,请在 segue 期间的某处调用以下代码:

        scene.removeFromParent()
        scene.view?.presentScene(nil)

这将关闭场景并实际上停止 Sprite 。

关于ios - 并不可怕的Segues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44523832/

相关文章:

ios - 单击按钮时修改生成的 imageViews 的图像

ios - 如何使用后退按钮返回到 First ViewController?

iphone - 无法从我的类(class)执行转场

ios - 如何在 prepareForSegue : 期间在目标 View Controller 上设置标题

iphone - 如何从自身通过电子邮件发送 Iphone 应用程序的 sqlite 数据库?

objective-c - Xcode 4.4 中的链接器错误

ios - React Native Ios发行版应用程序卡在白屏上,一段时间后崩溃,而在正常构建中完美运行

ios - xCode Sprite-Kit - 每个场景中的背景图像

ios - 退出时保存 VC (IOS)

具有惰性属性的 Swift 协议(protocol) - 不能在不可变值 : '$0' is immutable 上使用变异 getter