tvOS - 如何在不看中间视图的情况下切换回根控制器

时间:2016-01-14 08:15:44

标签: objective-c uistoryboard tvos unwind-segue

我正在做一个简单的游戏。故事板流程如下:

[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]

1 个答案:

答案 0 :(得分:1)

包括所有&#34; poppable&#34;在新的导航控制器中导航,并在需要时弹出导航控制器。我认为必须以模态方式呈现,但我不确定该部分。在这两种情况下尝试一下,它几乎是一个单行。

或者(这不是干净的)你可以首先弹出没有动画的父控制器,这对用户是不可见的,然后就像你做的那样popToRoot。中间视图已经弹出,你很好,它在其​​他任何地方都没有真正可以重复使用,并且是不好的做法。