使用导航控制器作为开始屏幕 ios

Posted

技术标签:

【中文标题】使用导航控制器作为开始屏幕 ios【英文标题】:Using Navigation controller for a start screen ios 【发布时间】:2014-11-24 02:24:44 【问题描述】:

我已经到了需要为使用 sprite kit 制作的游戏制作开始屏幕的地步。我无法让它与我阅读和观看的任何代码和教程一起显示。

我想使用导航控制器/视图控制器从开始屏幕开始并将其链接到我的应用程序,但我不确定如何将我的游戏代码链接到视图控制器。

使用导航控制器,我如何将它作为@IBAction 声明拖到我的游戏代码中?谢谢。

用当前代码编辑:

ViewController.m:

@implementation ViewController

- (void)viewDidLoad

[super viewDidLoad];

SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;

SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;

scene.viewController = self;

[skView presentScene:scene];

MyScene.h:

@interface MyScene : SKScene <SKPhysicsContactDelegate>

@property (strong, nonatomic) UIViewController *viewController;

@end

【问题讨论】:

看看这个答案:***.com/a/27056327/2043580 SKScene * scene = [MyScene sceneWithSize:skView.bounds.size]; 更改为 MyScene * scene = [MyScene sceneWithSize:skView.bounds.size]; 太棒了,谢谢!看起来它正在工作。现在我只需要创建开始屏幕。抱歉所有问题,但我只是用导航控制器和视图控制器制作开始屏幕,对吗?再次感谢您! 你的导航控制器应该连接到根segue。然后你的开始屏幕应该使用 rootViewController segue 和 navigationController 连接起来。最后,您的游戏 viewController 应该使用 push segue 连接到开始屏幕。 再想一想,我认为您应该完全放弃 navigationController,因为它使用导航栏。相反,将您的开始屏幕设置为根并使用模式 segue 到游戏 viewController。 【参考方案1】:

此答案基于here,但已翻译成Objective-C。

您面临的问题是 SKScene 不能直接访问它的 viewController,而只能访问它所在的视图。您需要手动创建指向它的指针。这可以通过为 SKScene 创建一个属性来完成:

@interface GameScene : SKScene

@property (strong, nonatomic) UIViewController *viewController;

@end

然后,在 viewController 类中,就在 [skView presentScene:scene]; 之前

scene.viewController = self;

现在,您可以直接访问 viewController。只需在这个 viewController 上调用 segue:

-(void)goToHomeScreen 
    [self.viewController.navigationController popToRootViewControllerAnimated:YES];

您可以以类似的方式执行其他 navigationController 操作。

【讨论】:

scene.viewController = self; 出现错误。它说“在'SKScene'类型的对象上找不到属性'viewController'”你知道如何解决它吗?一切都在正确的地方。 你在SKScene的头文件中声明了属性吗? @property 是声明属性的关键字。按原样使用代码。 是的,我的代码就是上面的。抱歉,当我尝试发布代码时,我的评论搞砸了。 请在您的问题中发布来自 viewController 的 presentScene 代码作为编辑。

以上是关于使用导航控制器作为开始屏幕 ios的主要内容,如果未能解决你的问题,请参考以下文章

导航控制器进入空白屏幕

iPhone - 如何将导航控制器添加到视图?

iOS NavigationController - 最佳实践

模态segue推动顶部的附加导航栏滑动

如何在 Swift iOS 中仅在最后一个屏幕上获取导航栏?

在 ios swift 中导航到其他屏幕时,不鼓励在分离的视图控制器上显示视图控制器