2012-07-18 54 views
3

我想在cocos2d的項目中顯示一個UIViewController,所以我在我的CCLayer類做到這一點:添加的UIViewController在cocos2d

-(void)displayMainMenu { 
    CGSize screenSize = [CCDirector sharedDirector].winSize; 
    [CCMenuItemFont setFontName:@"Marker Felt"]; 
    [CCMenuItemFont setFontSize:26]; 

    CCMenuItemFont *openViewC = [CCMenuItemFont itemWithString:@"Open View" target:self selector:@selector(loadMyViewController)]; 
    mainMenu = [CCMenu menuWithItems:openViewC, nil]; 
    [self addChild:mainMenu z:0]; 
} 

-(void) loadMyViewController{ 

    //Add the tableview when the transition is done 
    myView = [[MyViewController alloc] init]; 
    UIView *viewHost = hostView.view; 

    [[[CCDirector sharedDirector] view] addSubview:viewHost]; 
} 

,然後在我的ViewController回到我CCLayer我這樣做:

- (IBAction)exitAction:(id)sender 
    { 
    [self.view removeFromSuperview]; 

    [[CCDirector sharedDirector] pushScene: [MainMenu scene]]; //i need it or not? 
} 

和所有的工作,我使用cocos2d v2.0,但我想知道是否有更好的方式添加一個UIViewController在cocos2d場景,謝謝!

+0

爲避免泄漏,將MyViewController als childViewController添加到Director,並在添加後釋放myView。在刪除時,從超級視圖中刪除myView及其視圖。 myView覆蓋呈現CCNode的eaglview。所以你不需要推送和流行CCLayers。 – zeiteisen 2012-07-18 18:22:21

+0

你能解答一下嗎?謝謝,我在等待它! – Piero 2012-07-18 22:00:48

回答

9

由於在cocos2d 2.0導演是如在AppDelegate中加載的導航控制器的根的UIViewController的一個子類,實際上存在能夠利用非常簡單的方式UIKit動畫,如果你喜歡的話。它也使得場景完好無損,而不用擔心內存管理。你可以改變你的-loadMyViewController方法是:

- (void)loadMyViewController { 
    myView = [[MyViewController alloc] init]; 
    AppController *app = (AppController *)[[UIApplication sharedApplication] delegate]; 
    [app.navController pushViewController:myView animated:YES]; 
    [CCDirector sharedDirector].pause; 
} 

,然後簡單地恢復導演和調用[app.navController popViewController ...]當你想返回到cocos2d的場景。或者,您可以在推送視圖控制器而不是暫停時使用stopAnimation方法,與cocos2d處理進入背景的應用程序類似。

+0

你還能從cocos2d節點內的uikit控件獲得回調等嗎? – zardon 2012-08-14 19:34:40

+0

@zardon是的,你可以。 – Clay 2012-10-19 22:44:09

+0

優秀.. !!帽子脫下男人...... – 2013-02-19 19:11:18

1

如果是cocos2D 2.0,那就用這個。

AppController *app = (AppController*) [[UIApplication sharedApplication] delegate]; 
     [app.navController.view addSubview:newView]; 

婁的cocos2d 2.0

AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
    [app .viewController.view addSubview:newView]; 
+0

這比我的解決方案好嗎? – Piero 2012-07-18 16:05:15

+1

我更喜歡你的解決方案 – zeiteisen 2012-07-18 18:16:48

2

您可以使用一個簡單的代碼,如果你想彈出一個視圖,只需要導入yourviewcontroller.h文件,並使用此代碼,它支持所有的cocos2d版本

- (void)loadMyViewController { 

    yourviewcontroller *myView = [[yourviewcontroller alloc] init]; 

    UIView *viewHost = myView.view; 

    [[[CCDirector sharedDirector] openGLView] addSubview:viewHost]; 

}

//更換屏幕上,如果你想減少內存使用,或只是暫停

1

或者您可以使用此代碼..

ViewController *vc = [[ViewController alloc] init]; 

AppController *app = (AppController*) [[UIApplication sharedApplication] delegate]; 

[[app navController] presentModalViewController:vc animated:YES];