我很想看到有关如何以编程方式管理视图的详细说明。我将提供我现在如何做的一个概述,并希望对我的方法如何吸引评论,或只是如何干净利落地做一个概述。以编程方式添加和删除视图及其控制器的最佳方式是什么?
基本上,在我的应用程序的主视图控制器的loadView
方法中,我首先创建一个根视图并将它设置为self.view
。当我要附加控制器,也就是说,显示的第一个,我把这种方法:
-(void) attachViewForController:(UIViewController*)controller
{
[self.mRootView addSubview:controller.view];
[controller viewWillAppear:NO];
}
请注意,我明确地调用viewWillAppear
(我相信这不是自动调用它),在那里我手动执行任何将视图带入(滑入,淡入等)的动画。这种方法有什么不对或奇怪的地方吗?
现在,当我要离开这个观点并切换至另一个,我称之为设置的方法开关:
-(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
是否是否定的,并且有更合适的方法来管理视图流。
是否有一个原因,你是手动实现自己的视图控制器导航,而不是使用内置的视图控制器的推送和弹出? – 2012-05-05 16:18:43