4

두 개의 다른 활성 모달 뷰 컨트롤러간에 전환하고 부드러운 애니메이션을 시도하고 있습니다. 이상적으로는 새 모달보기가 현재 모달보기에서 모달보기가되는 것처럼 애니메이션을 표시하고 싶습니다.두 개의 모달 뷰 컨트롤러 간의 애니메이션 전환

내 응용 프로그램간에 일관성을 유지하려면 주어진 시간에 표시되는 모달보기 컨트롤러의 한 계층 만 제한해야합니다.

현재 모달 뷰를 애니메이션없이 닫고 RootController를 통해 다음 모달 뷰를 애니메이션으로 만들었지 만보기에는 좋지 않습니다.

감사합니다.

답변

7

기본 전환을 사용하여 첫 번째 모델 컨트롤러를 표시 할 수 있습니다. 두 번째 모델보기가 첫 번째 모델보기와 동일한보기 컨트롤러에서 할당되고 초기화되는 것 같습니다. 이 경우 첫 번째 모델보기 제어기에 두 번째 모달보기 제어기가 표시되도록 코드를 리팩토링하십시오. 이렇게하면 원하는 것처럼 다른 것을 표시 할 수 있습니다.

두 개의 모달보기 컨트롤러를 동일한 루트보기 컨트롤러에 표시하는 코드를 유지해야하는 경우 대리자 메서드를 만들 수 있습니다. 이렇게하면 첫 번째 모달보기 컨트롤러에서 첫 번째 모달보기 컨트롤러에 대한 참조를 전달하여이를 제시 한 루트보기 컨트롤러로 메시지를 보냅니다. 그런 다음이 참조를 사용하여 첫 번째 모달보기 컨트롤러에 두 번째 모달보기 컨트롤러를 표시하도록 알려줍니다.

전주기를 도입 할 기회가 적어 논리적으로 명확 해 졌기 때문에 전 솔루션을 추천합니다.

귀하의 해명에 대응

:

이 둘 사이에 전환을 시도 :

이미 이전 세션에서 표시됩니다 당신의 ModalViewControllerOne 경우에 : 당신의 rootViewController의 -viewDidAppear:

에서

self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self dismissModalViewControllerAnimated:YES]; 

첫 번째 모달보기 컨트롤러를 다시 루트보기 컨트롤러로 교차 분해 한 다음 새로운 모달보기 컨트롤러를 즉시 화면에 크로스 디졸브하는 것입니다.

스플래시 화면간에 다른보기 인 경우 두 개의보기 컨트롤러 대신 하나의보기 컨트롤러를 사용하여 입력 된 URL에 따라 다른보기를 한 화면 씩 스왑하고 애니메이션을 사용할 수 있습니다 보기간에 스와핑 할 때.

+0

이 모달 디스플레이는 본질적으로 다른 스플래시/로그인 화면입니다. 앱을 입력하는 데 사용 된 URL에 따라 다른 모달 얼룩이 표시됩니다. 따라서 스플래시 1이 앱의 이전 사용에서 올라와 스플래시 2를 요청하는 URL에서 앱을 입력하면 스플래시 1에서 스플래시 2로 부드럽게 전환하고 싶습니다. – FishStix

+0

답변을 업데이트했습니다. – Andrew

+0

나는 하나의 UINavigationController를 "modalController"로 추적하고 하나의 delegate 메소드에 ViewControllers 스택을 전달하고 window.rootController에 "presentController"가있는 경우 modalController를 표시하고 viewControllers를 애니메이션으로 바꿉니다. 그렇지 않으면 여전히 modalController의 뷰 컨트롤러를 설정하고 window를 호출합니다.rootController presentModalViewController : modalController – FishStix

관련 문제