【问题标题】:tvOS - How to segue back to root controller without seeing intermediate viewstvOS - 如何在不看到中间视图的情况下转回根控制器
【发布时间】:2016-01-14 08:15:43
【问题描述】:

我正在制作一个简单的游戏。故事板流程如下所示:

[Title Screen] --> [Game Screen] --> [Game Over Screen]

从游戏结束屏幕,当用户按下 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 中的 unwind segue 上禁用了“动画”复选框。

我应该怎么做?我准备完全放弃情节提要并尝试另一种方式。我觉得他们比自己管理笔尖更复杂。如果我不能让转场干净利落,我能想到的唯一另一种选择是在层次结构中引入一个虚拟黑屏,并弄清楚如何通过弹出和转场进行过渡:

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

【问题讨论】:

    标签: objective-c uistoryboard tvos unwind-segue


    【解决方案1】:

    在新的导航控制器中包含所有“可弹出”导航,并在需要时弹出导航控制器本身。我认为它必须以模态方式呈现,但我不确定那部分。在这两种情况下都试一试,它几乎是单行的。

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

    【讨论】:

    • 我会尝试第一个建议——你能解释一下怎么做吗?我以前从未见过这种技术。
    • 我从未为 tvOS 编程,但我猜它与 iOS 相同。您只需将所有控制器(在情节提要中)放入导航控制器的层次结构中,并且在需要时,您 this.navigationcontroller.pop
    猜你喜欢
    • 2017-08-09
    • 2020-05-14
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多