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