문제

개별 UIViewControllers 및 XIBS와 함께 멀티보기 응용 프로그램이 있습니다. 나는 게임보기 인 하나의 견해를 가지고 있으며, 그것을 호출 할 때마다 나는 그것을 다시 시작하기를 원합니다. 즉, 나는 초기 조건에서 다시 시작하고 마지막 상태가 아닌 상태에서 다시 시작한다는 의미입니다.

다음은 뷰를로드하고 제거하는 데 사용하는 코드 블록입니다.

-(void)loadStartViewController {
[currentView.view removeFromSuperview];
StartViewController *startViewController = [[StartViewController alloc] initWithNibName:@"StartView" bundle:nil];
[window addSubview:startViewController.view];
currentView = startViewController;

}

나는 여기서 더 명확해야한다. 게임이 진행되는 동안보기를 구성하는 uiviewcontroller와 xib가 있습니다. 그들은 Uiview의 메소드를 프로그래밍 방식으로 뷰를 그립니다. 게임이 끝나면 UIViewController를 떠나 점수 화면으로갑니다. 사용자가 다시 시작하고 게임으로 돌아가고 싶습니다. 즉, 위 코드로 UIViewController를로드하지만 새 게임으로 시작하면 모든 설정이 호출 된 메소드에 있습니다. 방금 변수를 설정하고 UIViewControllers 사이에 전달할 수는 있지만 게임 UIViewController 게임을 재설정 할 수있는 명령이있을 수 있지만 마지막 게임이 끝날 때 상태에 대해 아무것도 기억하지 못합니다.

작동하기 위해 게임 화면을 그리는 UIView의 모든 변수를 재설정하고 ViewDidload 섹션의 UIViewController에서 해당 메소드를 호출하는 메소드를 작성했습니다.

도움이 되었습니까?

해결책

귀하의 견해가 모델 (게임 상태)에 저장된 일부 데이터를 표시하고 있다고 가정합니다. 그렇다면 게임 상태를 재설정하고보기에 표시하고 싶지 않습니까? 뷰는 전화기의 메모리가 낮을 때 표시되거나 릴리스해야 할 때 시스템에 의해 관리 (로드/릴리스/다시로드)됩니다. 따라서 게임 상태를 별도로 처리하면 게임 상태 (모델)를 업데이트하고보기에 표시해야합니다.

내 "전망을 부르는"라는 것은 무슨 뜻입니까? '메뉴'에서 '게임 화면'으로 갈 때를 의미합니까?

보기가 표시된 후 게임 상태를 다시로드하면 도움이 될 수 있습니다. 같은 대표가 있습니다 ViewDidload 그러나 내 이해는보기가로드 된 후에 그들이 부름을 받고 있다는 것입니다. 그러나 메모리가 부족한 경우 뷰가 릴리스되어 나중에 다시로드 될 수 있으므로 모델 객체에서 게임 '상태'를 직접 관리하고보기에 표시해야합니다.

그것이 도움이 될지 잘 모르겠습니다. 나는 당신이 내 '견해를 부르는'것을 의미하는지 잘 모르겠습니다.

다른 팁

현재 표시되는 뷰를 추적하는 대신 uinavigationcontroller를 사용하십시오. 그것이 그들이하는 것입니다. ApplicationDidFinishLaunching에서 앱 대의원에서 :

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:startViewController];

startViewController에서 인스턴스 변수를 작성하고 생성 후 탐색 컨트롤러에 대한 포인터를 전달하십시오. 그런 다음 게임에 가고 싶을 때 :

[self.navigationController pushViewController:gameViewController animated:YES];

또는 애니메이션이 아닙니다. 또한 네비게이션 바를 숨기고 싶을 수도 있습니다.

[self.navigationController setNavigationBarHidden:YES animated:NO];

게임이 끝나면 원하는 뷰를 계속 밀어 올릴 수 있으며 언제든지 첫 번째보기로 돌아갈 수 있습니다.

[self.navigationController popToRootViewControllerAnimated:YES];

아, 그리고 당신이 플레이 할 때마다 게임을 다시 시작하는 것에 관해서는, 그냥 구현하십시오

-(void)viewWillAppear:(BOOL)animated{}

게임보기 컨트롤러에서 원하는 초기화를 수행하십시오. 솔직히 나는 당신이 .xib와 함께 그것을 사용해야한다고 확신하지는 않지만 ... 나는 인터페이스 빌더를 거의 사용하지 않으므로 확실하지 않습니다. 그러나 나는 그것이 효과가 있다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top