我正在慢慢接受Objective-C和iPhoneSDK,但是我遇到了一些问题,让我不知所措。
我正在充实一款游戏,我希望它能拥有像闪屏,标题,帮助等屏幕。我目前正在做的是为每个屏幕创建一个新的UIViewController和一个新的笔尖,这是正确的做法?在主AppDelegate中,我创建了显示视图的方法,并使用[window addSubView:controller.view]添加它们。我发现的是,随着显示/隐藏代码位于AppDelegate中,我必须在加载的控制器中创建AppDelegate的引用,以便定位隐藏代码。 这看起来有点尴尬但我希望我可能接近这个错误,你们通常会做这类事情吗?
// example from AppDelegate
-(IBAction)showHelp:(id)sender
{
helpScreen = [[helpController alloc] initWithNibName:@"helpView" bundle:nil];
// send copy of self in order to target closeHelp method from InterfaceBuilder
helpScreen.appDel = self;
helpScreen.view.alpha = 0;
[window addSubview:helpScreen.view];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
helpScreen.view.alpha = 1.0;
[UIView commitAnimations];
}
非常感谢,
答案 0 :(得分:3)
UIViewController和每个屏幕的新笔尖,这是正确的做法
叶氏!
[window addSubView:controller.view]
您是否还在动画结束时删除旧视图?你应该是,否则你会有多个视图控制器同时运行,这是你真正不想要的。
我发现的是 显示/隐藏AppDelegate中的代码, 我必须创建一个参考 AppDelegate在加载的控制器中 为了定位隐藏代码
在某个地方你需要负责切换视图的代码,如果视图可以控制这种切换,那么他们确实需要一种方法来触发它。而不是app委托我通常有一个执行这些更改的RootViewController。
我倾向于从具有委托属性的基类派生这些视图中的每一个,以执行这些更改。当视图需要更改时,它们会调用委托中的函数。这些通常是;
E.g。
// your root controller
-(void) changeView:(UIViewController) newController
{
newController = blah blah;
newController.delegate = self;
// add newController view, remove old one etc
}
// new controller
-(void) userPressedHelp
{
UIViewController* help = blah blah;
[self.delegate pushView: newController];
}
// help controller
-(void) userPressedOk
{
[self.delegate popView];
}
答案 1 :(得分:0)
这对我来说似乎很合理。我是Obj-C的新手,但这就是我完成应用程序的方式。
只要ViewControllers彼此不了解,我认为你做得很好。