Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 非';不可怕_Ios_Swift_Uistoryboardsegue - Fatal编程技术网

Ios 非';不可怕

Ios 非';不可怕,ios,swift,uistoryboardsegue,Ios,Swift,Uistoryboardsegue,在我的主菜单上,我有一个简单的按钮布局和一对精灵,它们在背景中移动,使它更具交互性。当我第一次运行它时,一切正常,精灵移动平稳,如果我单击菜单的一个按钮,就会调用自定义segue,并且下一个视图控制器将以我想要的方式显示。然后我可以按下后退按钮,菜单再次显示,一切(大部分)都很好 然而,如果我重复这个过程(向导航系统发送垃圾邮件),segues仍然可以工作,但最终菜单页面上的精灵开始滞后,并以急剧跳跃而不是平滑滑动的方式移动。所以我认为我的segue实现有问题 示例代码: class Segue

在我的主菜单上,我有一个简单的按钮布局和一对精灵,它们在背景中移动,使它更具交互性。当我第一次运行它时,一切正常,精灵移动平稳,如果我单击菜单的一个按钮,就会调用自定义segue,并且下一个视图控制器将以我想要的方式显示。然后我可以按下后退按钮,菜单再次显示,一切(大部分)都很好

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

在uiview动画中,使用动画属性true而不是false

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

在uiview动画中,使用动画属性true而不是false

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

这里的问题是,你没有忽略赛格之前的场景。事实上,他们只是在后台运行。要解决此问题,请在会话过程中调用以下代码:

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

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

这里的问题是,您没有在开始前取消场景。事实上,他们只是在后台运行。要解决此问题,请在会话过程中调用以下代码:

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

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

为什么不使用正常的分段机制?是“后退按钮”导致分段还是只是关闭当前的视图控制器?它导致分段,我发现了。向下滚动查看…Dishant Kapadiya,你所说的正常segues机制是什么意思?为什么不使用正常segues机制?是“后退按钮”导致了segue还是只是关闭了当前的视图控制器?它导致了segue,我发现了。向下滚动查看…Dishant Kapadiya,你所说的正常分段机制是什么意思?