뷰를 프로그래밍 방식으로 관리하는 방법에 대한 자세한 설명을보고 싶습니다. 나는 지금 어떻게하고 있는지에 대한 개요를 제공 할 것이고, 내 접근 방식이 얼마나 짜증나는 지에 대한 의견이나 깨끗하고 올바르게 수행하는 방법에 대한 간단한 설명을 원할 것이다.뷰와 컨트롤러를 프로그래밍 방식으로 추가 및 제거하는 가장 좋은 방법은 무엇입니까?
기본적으로 내 앱의 기본보기 컨트롤러의 loadView
방법에서 루트보기를 만들고 self.view
을 설정합니다. 내가 컨트롤러, 말, 표시되는 첫 번째를 첨부 할 때, 나는이 방법 전화 : 내가 명시 적으로 viewWillAppear
전화
-(void) attachViewForController:(UIViewController*)controller
{
[self.mRootView addSubview:controller.view];
[controller viewWillAppear:NO];
}
공지 사항 (나는 그것이 자동으로 호출되지 않은 생각), 내가 수동으로 수행 할 경우 뷰를 가져올 애니메이션 (슬라이딩 인, 페이드 인 등). 이 접근법에 이상하거나 이상한 점이 있습니까? 나는이보기를 떠나 다른로 전환 할 때
지금, 내가 설정하는 방법을 스위치 전화
:-(void) setControllerSwitch:(UIViewController*)outgoingController
incomingController:(UIViewController*)incomingController
delay:(float)delay;
{
self.mOutgoingController = outgoingController;
self.mIncomingController = incomingController;
self.mSwitchControllerTimer = [NSTimer scheduledTimerWithTimeInterval:delay target:self selector:@selector(switchControllerCallback) userInfo:nil repeats:NO];
}
시간이 순간, 나는 발신의 종료 애니메이션을 시작했습니다 이 메서드는 컨트롤러를 기록하고 나가는 뷰가 애니메이션 처리 된 순간에 실제 전환을 수행 할 메서드를 예약합니다. 이와 같이 :
-(void) switchControllerCallback
{
self.mSwitchControllerTimer = nil;
// remove outgoing view
[mOutgoingController.view removeFromSuperview];
// add incoming view
[self attachViewForController:mIncomingController];
}
이것은 관리하기에 알맞은 방법입니까? 몇 가지 포인트 :
가 나는 경우 나가는 컨트롤러 애니메이션의 끝을 트리거를 설정하는 대신 콜백을 아마 수 알지만, 그냥 날 페이드보기를 교차 할 수 있도록 공간을 확보하기 위해 명시 적으로 지연 PARAM을 통해 작업을 수행하는 선택 . 그러나 초기에
setControllerSwitch
이라고 부르는 것은 실제로 이전 컨트롤러를 쓸모 없게 만들고 애니메이션을 잘라 버리기 때문에 사실 크로스 페이딩을 허용하지 않을 수도 있습니다.앞에서 언급했듯이
viewWillAppear
을 명시 적으로 호출하면 아니요 아니요,보기 흐름을 관리하는 더 적절한 방법이 있는지 궁금합니다.
뷰 컨트롤러의 기본 제공 푸시 및 팝핑을 사용하는 대신 자신의보기 컨트롤러 탐색을 수동으로 구현하는 이유가 있습니까? –