使用导航控制器作为开始屏幕 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的主要内容,如果未能解决你的问题,请参考以下文章
iOS NavigationController - 最佳实践