3

cocos2dプロジェクトでUIViewControllerを表示したいので、CCLayerクラスでこれを行います。

-(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を使用していますが、cocos2dシーンにUIViewControllerを追加するより良い方法があるかどうか知りたいです、ありがとう!

4

4 に答える 4

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;
}

次に、ディレクターを再開し、cocos2dシーンに戻りたいときに[app.navControllerpopViewController...]を呼び出します。または、cocos2dがアプリを処理してバックグラウンドに入るのと同じように、一時停止する代わりにビューコントローラーを押すときにstopAnimationメソッドを使用することもできます。

于 2012-07-19T01:57:55.740 に答える
2

ビューをポップアップしたい場合は、単純なコードを使用できます。yourviewcontroller.hファイルをインポートして、すべてのcocos2dバージョンをサポートするこのコードを使用してください。

- (void)loadMyViewController {

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

     UIView *viewHost = myView.view;

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

}

//メモリ使用量を減らしたい場合、または単に一時停止したい場合は、画面を置き換えます

于 2012-10-09T14:04:16.953 に答える
1

または、このコードを使用できます。

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

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

[[app navController] presentModalViewController:vc animated:YES];
于 2012-10-11T06:53:01.817 に答える
1

cocos2D 2.0の場合は、これを使用します。

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

ベローcocos2d2.0

AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
    [app .viewController.view addSubview:newView];
于 2012-07-18T12:10:38.860 に答える