2012-02-09 35 views
0

請告訴我可以使用一段時間,而應用程序正在加載(同時顯示啓動畫面)來執行一些後臺操作? (我需要調用CLLocationManager並更新當前位置)如果允許我這樣做,請告訴我在哪裏放置代碼。我可以做什麼,而飛濺正在顯示?

+0

的「閃屏」是不是真的打算用作啓動畫面。它最初是爲了顯示你的應用程序的UI,但沒有任何數據。這將立即顯示給用戶一個印象,即應用程序已經非常快速地加載,然後用其中的數據刷新。但人們調整它顯示一個加載屏幕(公司標誌等),所以我認爲蘋果最終只是接受那將會發生的事情。 – 2012-02-09 12:36:46

回答

2

在顯示實際啓動畫面時,不可能執行任何操作。 你的行動開始時,在啓動畫面移除時執行

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

方法。 如果您想在顯示用戶界面之前執行一些耗時的操作,則您唯一的選擇是在此期間手動顯示「假」閃屏。它可以是圖像或其他任何東西,例如活動指標或動畫。如果您使用的是用於啓動畫面的相同圖像, 用戶將看不到任何區別,它看起來像啓動畫面將保留幾秒鐘,但您已經加載了您的數據。

在這種情況下,你的應用程序代理可能是這樣的:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.viewController = [[ViewController alloc] 
    initWithNibName:@"FakeSplashViewController" bundle:nil]; 
    self.window.rootViewController = self.viewController; 
    [self performSelectorInBackground: @selector(someLongOperation) withObject: nil]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

- (void) someLongOperation{ 
    //doing something 
    //... 
    [self performSelectorOnMainThread:@selector(atLastLoadGUI) withObject:nil waitUntilDone:NO]; 
} 

- (void) atLastLoadGUI{ 
    // start GUI 
}