我正在做一个简单的游戏。故事板流程如下:
[Title Screen] --> [Game Screen] --> [Game Over Screen]
在Game Over屏幕上,当用户按下MENU时,我想直接跳回到标题屏幕,而不会看到游戏画面。
我首先在我的GameOverViewController
中尝试了这个:
- (void) pressesBegan:(NSSet<UIPress*>*) presses withEvent:(UIPressesEvent*) event
{
for (UIPress* press in presses)
{
if (press.type == UIPressTypeMenu)
{
[self.navigationController popToRootViewControllerAnimated:NO];
return;
}
}
[super pressesBegan:presses withEvent:event];
}
它正确弹出,但动画未被禁用。您可以清楚地看到游戏屏幕出现一秒钟,具有非常明显的淡入/淡出过渡。游戏视图甚至会收到-viewWillAppear:
和-viewWillDisappear:
条消息。
接下来,我尝试将pop
替换为unwind segue。
[self performSegueWithIdentifier:@"Game Over to Title" sender:self];
此效果看起来略有不同 - 游戏画面由于某种原因仅在极短时间内出现 - 但在我们返回标题之前至少可以看到1或2帧。我在Xcode中解除了unwind segue上的“Animates”复选框。
我应该怎么做?我准备好完全转储故事板并尝试另一种方式。我觉得他们比自己管理笔尖更复杂。如果我不能让segues干净利落,我能想到的唯一另一个选择就是在层次结构中引入一个虚拟黑屏,并找出如何通过pop和segue进行转换:
[Game Screen]
/
[Title Screen] --> [Dummy Black Screen]
\
[Game Over Screen]
答案 0 :(得分:1)
包括所有&#34; poppable&#34;在新的导航控制器中导航,并在需要时弹出导航控制器。我认为必须以模态方式呈现,但我不确定该部分。在这两种情况下尝试一下,它几乎是一个单行。
或者(这不是干净的)你可以首先弹出没有动画的父控制器,这对用户是不可见的,然后就像你做的那样popToRoot
。中间视图已经弹出,你很好,它在其他任何地方都没有真正可以重复使用,并且是不好的做法。