我有一个项目,我在其中使用故事板、导航控制器和故事板 segues。我在其中一个视图中有一个 cocos2d 视图。该视图GameLayer
具有CCLayer
嵌入在 cocos2dViewController 中的类,cocos2dViewController : CCViewController
而 CCViewController 又是 .so 的子类。CCViewController : UIViewController
所以,在我的 Cocos2d 视图中,它是一个 CCLayer,不能使用 [self performSegue....] 方法,因为它不是uiviewcontroller 的直接子类或其他东西。
我试过了
GameOverViewController *gameOver = [[GameOverViewController alloc]init];
UIViewController* rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
[rootViewController presentViewController:gameOver animated:YES completion:NULL];
但这只是让我Warning: Attempt to present <GameOverViewController: 0x107d0060> on <UINavigationController: 0x9d33890> whose view is not in the window hierarchy!
我也试过
GameOverViewController *gameOver = [[GameOverViewController alloc]init];
AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
[[app navController] presentModalViewController:gameOver animated:YES];
但这根本没有做任何事情
所以我要么需要在 UIViewController 的子类的较高类之一上执行选择器,在这种情况下,我该怎么做?
或者我需要从我的 CCLayer 执行 segue,在这种情况下我该怎么做?对我来说都很好:)
编辑:澄清的问题:
我需要从作为子类的 GameLayer 中进行转场CCLayer
,因此它不能使用正常的转场方法。GameLayer 是嵌入的或其他的,cocos2dViewController
它的子类CCViewController
最终是 UIViewController 的子类。我在我的项目中使用故事板,CCViewController 是响应 IBOutlets 的视图控制器。所以我需要从我的游戏层以某种方式从这个文件中推送转场。您可以在此处查看游戏系统: mediafire.com/ ?7dil7uolo5k1syr ,来自我制作的模板。我想将一个 segue 从游戏视图控制器拉到另一个视图。到目前为止,我已经尝试了在另一个文件 ccdirector 和其他文件中执行此操作的各种方法。
对于不熟悉 cocos2d 的人来说,CCLayer 是 CCNode 的子类,CCNode 是 NSObject 的子类。因此,您可以将此视为有关如何从 NSObject 在 UIViewController 中执行 segue 的问题。
所以 tl;dr:从嵌入 UIViewController 子类的子类中的 CCLayer(NSObject) 执行故事板转场。