2012-07-18 6 views
3
나는적인 Cocos2D 프로젝트에서의 UIViewController를 표시 할

에서의 UIViewController을 추가, 그래서 난 내 CCLayer 클래스에서이 작업을 수행 있습니다는적인 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을 사용하지만, cocos2d 장면에서 감사장을 추가하는 더 좋은 방법이 있는지 알고 싶습니다. 감사합니다!

+0

누출을 방지하기 위해 MyViewController가 Director에 childViewController를 추가하고 추가 된 후에 myView를 릴리스합니다. 제거 할 때 superview에서 myView와 뷰를 제거하십시오. myView는 CCNode가 렌더링되는 eaglview를 다룹니다. 따라서 CCLayers를 밀고 팝하지 않아도됩니다. – zeiteisen

+0

답변에서 더 잘 설명 할 수 있습니까? 고마워, 나는 그것을 기다리고있어! – Piero

답변

9

을적인 Cocos2D 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.navController popViewController을 ...] 호출합니다. 또는 cocos2d가 백그라운드로 들어가는 앱을 처리하는 것과 비슷하게 일시 중지 대신보기 컨트롤러를 밀 때 stopAnimation 메소드를 사용할 수 있습니다.

+0

cocos2d 노드 내부의 uikit 컨트롤에서 콜백 등을 얻을 수 있습니까? – zardon

+0

@ 자르도 네, 가능합니다. – Clay

+0

우수 .. !! 남자 모자 ... –

1

cocos2D 2.0 인 경우 다음을 사용하십시오.

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

우는 소리가적인 Cocos2D 2.0 감독 이후 2.0

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

내 솔루션보다 낫다. – Piero

+1

나는 당신의 솔루션을 선호한다 – zeiteisen

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