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



我正在制作一个简单的游戏。故事板流程看起来像:

[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替换为一个展开段。

[self performSegueWithIdentifier:@"Game Over to Title" sender:self];

这种效果看起来略有不同——出于某种原因,游戏屏幕只显示了非常短暂的时间——但在我们回到标题之前,它至少可以显示1到2帧。我已经禁用了Xcode中展开片段上的"动画"复选框。

我该怎么做?我准备完全抛弃故事板,试着用另一种方式来做。我觉得它们比自己管理笔尖更复杂。如果我不能让分段干净地进行,我唯一能想到的其他选择就是在层次结构中引入一个虚拟黑屏,并找出如何通过弹出和分段进行转换:

                          [Game Screen]
                           /
[Title Screen] --> [Dummy Black Screen]
                           
                          [Game Over Screen]

在新的导航控制器中包含所有"popable"导航,并在需要时弹出导航控制器本身。我认为它必须以模式呈现,但我不确定这部分。在这两种情况下都试一下,这几乎是一句俏皮话。

或者(这不是干净的)你可以先弹出没有动画的父控制器,这对用户来说是不可见的,然后像你做的那样popToRoot。如果中间视图已经弹出,那就太好了,只是它在其他地方不能真正重复使用,而且这是一种糟糕的做法。

相关内容

  • 没有找到相关文章

最新更新