2012-11-25 3 views
0

프로그래밍 및 Obj-c에 익숙하지 않고 문제가 있음을 알기 쉽습니다. 스토리 보드를 사용하여 게임의 각 페이지를 표시하고 있으며 게임 주 화면에서 특정 시간에 게임 오버 화면을 인스턴스화하는 코드가 있지만 새로운 장면을 호출하는 방식이 내가 뭘했는지 알기 위해.스토리 보드 화면 게임 오버 화면

현재 메인 화면은 게임 오버 화면 아래에서 계속 실행되지만 게임 화면의 모든 것을 중단하고 점수 값만 게임 오버 페이지로 전송됩니다.

내 현재 코드는 화면에 걸쳐 게임을로드 :

-(void)goGameOver 
{ 
//Send to Game Over screen 
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"gameOverPage"]; 
vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self presentViewController:vc animated:NO completion:NULL]; 
} 

내가 알려 주시면 물건을 바꿔 시도하겠습니다하지 않을 경우 내 목표는 분명하다 바랍니다.

답변

0

보기 컨트롤러가 작동하는 방식은 "팝"또는 "해제"될 때까지 계속 활성 상태가 유지된다는 것입니다. 게임 페이지에 모달 뷰를 표시하고 있기 때문에 게임 페이지는 여전히 메모리에 남아 있으므로 원할 경우 계속 수행 할 수 있습니다.

아주 일반적인 디자인 패턴은 모달보기 컨트롤러를 만들고 제시 한 페이지가 프로토콜/위임이라는 메커니즘을 통해이를 무시한다고 가정합니다. 이것이 가능할 수있는 유일한 방법은 여전히 ​​활성 상태이고 활성 상태이기 때문에 다른 코드도 실행 중일 수 있기 때문입니다.

"게임 오버"보기가 표시되면 어떻게 될지 잘 모르겠습니까? 새로운 게임을 시작할 수 있습니까? 그렇다면 어디에서 시작합니까? 어쨌든 내비게이션은 애플리케이션마다 다를 수 있습니다.

한 가지 생각은 기본 탐색 지점으로 돌아가서 해당 컨트롤러의 페이지에 게임 시작 페이지와 게임을 모두 표시하고 게임이 종료되면 활성보기 컨트롤러를 "루트 컨트롤러"로 다시 가져 오는 것입니다. 거기서 게임을 볼 수 있습니다. 그런 다음이 방법을 사용하여 "처음부터 다시 시작"을 원한다면 간단한 "팝"또는 "닫기"를 사용하여 게임을 시작하려는 시작 부분에서 바로 시작할 수 있습니다.

실제로 그렇게하려면 UINavigationController가 필요합니다. 스토리 보드와 섹스를 사용한다고 언급 했으므로 UINavigation 컨트롤러에 연결된보기 컨트롤러를 정렬하는 것이 일반적입니다.

그런 경우 플래그 또는 개체를 사용하여 게임이 시작되었는지 확인하고 같은 플래그를 사용하여 게임을 결정할 수 있습니다. 당신이 게임을 결정하는 시점에서 당신이보기에, 끝났다, 이제

-(void)viewWillAppear:(BOOL)animated { 

    if(self.gameStarted == NO){ 
     self.gameStarted = YES; 
     [self performSegueWithIdentifier:@"startGame"]; 
} 
else { 
     self.gameStarted = NO; 
     [self performSegueWithIdentifier:@"endGame"]; 
} 

:

그래서 예를 들어, 탐색 스택의 첫 번째 뷰 컨트롤러에이 같은 몇 가지 논리가있을 수 있습니다 컨트롤러는 네비게이션 스택에 있어야합니다, 당신은이 같은 첫 번째 컨트롤러에 다시 "팝업"해야

[self.navigationController popToRootViewControllerAnimated:YES]; 

내가 그 생각이 어떤 식 으로든 도움이되기를 바랍니다. 네비게이션이 원하는 방식으로 작동하도록하는 것이 때때로 어려울 수 있습니다.

관련 문제