2011-07-06 5 views
0

저는 UINavigationController를 기반으로 게임을 디자인하고 제작했습니다. 그림과 같은 ViewController가 여러 개 있습니다. RootVC에서 NewGame을 선택하면 게임 준비가 완료됩니다. 끝나면 NextBoardVC에서 다음 게시판으로 가려고합니다. 10 개의 보드가 있으면 NextLevelVC로 다음 레벨로갑니다. 5 단계가 있습니다. 각 레벨에는 10 개의 보드가 있습니다. 문제는 pushViewController 메서드를 사용하여 각 ViewController를 푸시하는 것입니다. 5 단계 후에 스택에 52 개의 VC가 있고 때로는 응용 프로그램이 충돌합니다.NavigationController 오버플로

GameVC에는 많은 png가 포함되어 있으며 일부 사운드는 매우 무겁습니다. 나는 어떤 누출 (악기에 의해 테스트)

죄송합니다, 나는 이미지를 업로드 할 수 없으므로 미안하지만, 나는 이미지를 업로드 stackoverflow. 뷰 계층의http://imageshack.us/photo/my-images/641/navigationg.jpg/

텍스트 표현 :

RootVC 
--OptionsVC 
--HowToPlayVC 
--NewGameVC 
    --GameVC 
    --NextBoardVC 
     --NextLevelVC 
     --GameVC 
      --NextBoardVC 
       --NextLevelVC 
       --GameVC 
        --NextBoardVC 
        --NextLevelVC 
         --GameVC 
         --... and so on many times 

탐색을 수행하고 충돌을 제거하기 위해 더 나은 방법이 있나요

이 이미지입니다?

답변

2

특히 "루프"에서 돌아 오는 지점에서 점점 더 많은 컨트롤러를 맨 위에 밀어 넣는 대신 컨트롤러를 다시 꺼내십시오.

0

setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated을 사용하여 탐색 스택에 직접보기 컨트롤러를 설정할 수 있다는 것을 잊지 마십시오.

새 레벨을 탐색 스택에 밀어 넣는 대신 모든보기 컨트롤러에 해당 레벨까지 새 레벨을 더한 배열을 만들고 위의 setViewControllers 메서드를 사용하여 한 레벨을 다음 레벨로 바꿀 수 있습니다.

0

보기 컨트롤러 계층을 잘못 관리하고 있습니다. 내비게이션 컨트롤러에는 다이어그램에 나와있는대로 루프가 없어야합니다.

또한 내비게이션 컨트롤러는 시각적 인을 먼저 관리하고 논리적 인 1 초를 관리해야합니다. 예 : 그룹 목록보기가 여러 속성 세부 편집보기 중 하나를 푸시하는 연락처 세부 정보를 푸시하는 연락처 목록을 푸시하는 연락처 앱입니다. 한 번보기를 떠날 때마다 그보기가 터져서 계층 구조를 이전보기로 "위로"이동합니다. 마지막 계약 상세보기 상단에 다른 연락처 세부 정보보기를 밀어서 하나의 상세보기에서 다음 연락처보기로 구성하지 마십시오.

마찬가지로 다음을 누르기 전에 기존 BoardVC 또는 LevelVC을 스택에서 팝해야합니다.

은에 다음

RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelOneVC 

... 그리고 : 당신이하는 새로운 게임의 첫 번째 레벨 셋업에

(키 여기에 - 팝 의미 -> 푸시와 < 수단) 먼저 다음 단계를 추가하십시오.

RootVC-->NewGameVC-->GameVC-->BoardVC<--LevelOneVC 

......

RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelTwoVC 

다른 모든 수준 반복 : 다음

RootVC-->NewGameVC-->GameVC-->BoardVC 

...과 : 얻을 수 있습니다. 필요에 따라 각 BoardVC에 대해 동일한 작업을 수행 할 수 있습니다.

트릭은 기본 탐색 컨트롤러 전환 인 슬라이드 전환을 사용하지 않는 것입니다. 이 전환은 사용자에게 다음과 같은 논리적 레이아웃을 기대하게합니다.

RootVC-->NewGameVC-->GameVC-->BoardVC-->LevelOneVC-->LevelTwoVC 

... 이는 문제의 원인입니다. 대신, 페이드와 같은 다른 트랜지션을 사용하거나 트랜지션을 함께 숨길 수 있습니다.

사용자의 탐색에 필요하지 않은 뷰를 터뜨리면 컨트롤러 스택이 아무 때나 5 개 이상의 뷰 컨트롤러를 볼 수 없으므로 메모리에 5 개의 뷰 컨트롤러 만 필요하다는 것을 확인할 수 있습니다.