Segues并不可怕

时间:2017-06-13 14:02:52

标签: ios swift uistoryboardsegue

在我的主菜单上,我有一个简单的按钮布局和几个在后台移动的精灵,使其更具交互性。当我第一次运行它时,一切都很好,精灵移动得很顺畅,如果我点击其中一个菜单的按钮,就会调用一个自定义的segue,下一个视图控制器将按照我想要的方式呈现。然后我可以按一个后退按钮,再次显示菜单,一切都很好。

然而,如果我重复这个过程(垃圾邮件导航系统),segue仍然可以工作,但最终菜单页面上的精灵开始滞后并以急剧跳跃而不是平滑的幻灯片移动。所以我认为我的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附加到每个视图控制器。这就是我将精灵附加到的地方。而且我认为这与它有关...

2 个答案:

答案 0 :(得分:0)

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

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

关闭场景并实际停止精灵。

答案 1 :(得分:-1)

uiview动画中的

使用动画属性为true而不是false。

browser.page.exist(30)