我要提到的第一件事情是在HIG中啓動畫面特別令人不滿。特別是那些只會讓用戶等待&盯着他們不關心的標誌。
現在這種咆哮已經消失了,我假設你可能有一些負載在你想要在顯示標籤之前發生。
在這種情況下,我不加載MainWindow.xib中的標籤欄。相反,我啓動我的單一視圖(使用XIB)來完成加載。原因是這樣的:你甚至可以在看到你的啓動畫面之前支付所有這些視圖的加載費用。
在加載數據的情況下,有時這些選項卡依賴於正在加載的數據,所以更加有意義的是等待加載選項卡欄控制器。
應用程序的委託最終看起來像這樣:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window makeKeyAndVisible];
[window addSubview:splashController.view]; //this assumes MainWindow.xib defines your splash screen, otherwise....
UIViewController *splashController = [[SplashController alloc] initWithNibName:@"SplashController" bundle:nil];
splashController.delegate = self;
[window addSubview:splashController.view];
//hang on to it in an ivar, remember to release in the dealloc
}
然後在閃屏控制器,當我完成加載,我這樣做:
-(void)doneLoading {
[self.delegate performSelector:@selector(splashScreenDidFinishLoading)];
}
當然self.delegate
沒有按」牛逼存在,它可以被添加簡單的是這樣的:
//header
@property (nonatomic, assign) id delegate;
//implementation
@synthesize delegate;
然後,只需確保和落實該應用程序代理的方法:
-(void)splashScreenDidFinishLoading {
//load up tab bar from nib & display on window
//dispose of splash screen controller
}
我在少數應用程序中使用了這種模式,很簡單,效果很好。你也可以選擇在上面的方法中做一個漂亮的過渡動畫。
希望這會有所幫助。
我覺得這種方法非常有趣,但是我必須做一些可怕的事情,因爲我使用這段代碼的結果是兩條編譯器消息:1.錯誤:請求成員的「委託」,而不是結構或聯合2.警告:'' UIWindow'可能不會響應'-addSubView:' – 2010-10-21 04:53:35
我輸入這個沒有編譯:)它是addSubview(小寫'v')。 – 2010-10-21 17:15:03
此外,代表是您將自己實現爲splash視圖控制器上的一個屬性的東西。 @屬性(非原子,分配)ID委託;我已更新問題以顯示此... – 2010-10-21 17:15:46