【问题标题】:Moving from a scene to a view controller - Attempt to present ViewController whose view is not in the window hierarchy从场景移动到视图控制器 - 尝试呈现视图不在窗口层次结构中的 ViewController
【发布时间】:2014-10-19 06:48:41
【问题描述】:

我正在使用 Storyboard 开发 iPhone 应用程序,我需要处理从一个视图控制器到另一个视图控制器的视图更改。我有:

-INTROViewController.m
-INTROscene.m (this is a SKScene laid out by the above controller)

-UpgradeViewController.m

INTROscene.m 中有一个精灵按钮,当我按下它时,它会触发其视图控制器 (INTROViewController.m) 看到的通知,这会触发切换到另一个视图控制器 (UpgradeViewController.m)。如果我使用 Option 1,(甚至会添加延迟以确保第一个视图出现),它会触发以下错误:

“尝试呈现其视图不在窗口层次结构中的 ViewController!”

我找到了一种在不触发此错误的情况下切换视图控制器的方法(选项 2),但是视觉效果很糟糕,在两个视图之间显示一个空白屏幕会有一点延迟。此外,我无法使用modalTransitionStyle 提供的任何漂亮过渡。

在这种情况下,在视图之间切换的正确方法是什么?

在我的 AppDelegate 中,我没有根视图控制器(我不知道应该如何设置)。这就是我收到错误的原因吗?如果是这样,我该如何实施?干杯!

//Option 1 (triggers the error above)
  -(void)TransitionTo_Upgrades_ViewController:(NSNotification *)notification
    {
        //Take from INTROViewController to UpgradeViewController 
        UpgradeViewController *controllerUPGRADES = [self.storyboard instantiateViewControllerWithIdentifier:@"Upgrades_storyboard"];
        controllerUPGRADES.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self performSelector:@selector(NowGotoUPRADES) withObject:nil afterDelay:2.0];
    }

    - (void)NowGotoUPRADES
    {
        [self presentViewController:controllerUPGRADES animated:YES completion:nil];
    }

//Option 2 (no error but horrible effect)
-(void)TransitionTo_OPTIONS_ViewController:(NSNotification *)notification
{
        [self performSelector:@selector(NowGotoOPTIONS) withObject:nil afterDelay:2.0];
}
- (void)NowGotoOPTIONS
{
        //Take from INTROViewController to UpgradeViewController 
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    UIViewController *DesiredViewController = [storyBoard instantiateViewControllerWithIdentifier:@"Options_storyboard"];
    [[[[UIApplication sharedApplication] delegate] window] setRootViewController:DesiredViewController];
}

【问题讨论】:

    标签: ios iphone uiviewcontroller sprite-kit skscene


    【解决方案1】:

    我遇到过同样的问题,并且发现没有解决方案,因为一旦您在视图控制器中从一个场景移动到另一个场景,您就无法移动到其他视图控制器,因为您已经移出了正确的层次结构。我对此的解决方案是将我的其他视图控制器作为 skscenes,但是您可能希望将大部分 skscenes 作为视图控制器,同时在同一个视图控制器上也不在场景之间移动。

    希望这会有所帮助。如果您需要任何澄清,请回复。

    【讨论】:

    • 嗨。感谢您确认我的疑问。虽然这不能做到,但这很疯狂!您是否说可以直接在视图控制器内设置整个 skscene 而无需使用其他类?我理解正确了吗?这可能是一个解决方案
    • 是的,这应该是可能的。只需一个视图控制器,您就可以拥有多个 skscenes。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2019-06-10
    • 2015-09-17
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    相关资源
    最近更新 更多