2014-04-24 47 views
1

我有一個應用程序,第一個屏幕用戶看到有從服務器獲取的數據。該應用程序還具有啓動畫面,該應用程序正在加載時顯示。可以配置啓動畫面時間嗎?

問題 根據用戶連接時間的不同,數據可能需要幾秒鐘才能加載。在這種情況下,啓動屏幕出現幾秒鐘,然後我只看到一個空白(黑色)屏幕再過幾秒鐘,然後我看到第一個屏幕。我懷疑在從服務器獲取數據的時候會出現空白屏幕。我想辦法來解決這個問題

問題

  • 時間的閃屏顯示出來的長度可配置?例如,也許閃屏可以保持直到數據被提取?
  • 數據加載時,可以顯示某種形式的微調而不是黑屏嗎?

更新

這是我如何加載數據

def self.fetch(client, &block) 
    client.shared.headers["username"] = App::Persistence["username"] 
    client.shared.headers["token"] = App::Persistence["sessionId"] 
    client.shared.get('categories') do |result| 
     if result.success? 
     ary = result.object 
     block.call(ary) 
     end 
    end 
    end 

,並使用它

def application(application, didFinishLaunchingWithOptions:launchOptions) 
     @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds) 
     Color.fetch(AFMotion::Client) do |data| 
     main_controller = ColorController.alloc.initWithData(data) 
     @window.rootViewController = UINavigationController.alloc.initWithRootViewController(main_controller) 
     @window.rootViewController.navigationBar.barTintColor = '#DF533B'.to_color 
     @window.rootViewController.navigationBar.translucent = true 
     @window.rootViewController.navigationBar.tintColor = UIColor.whiteColor 
     @window.rootViewController.navigationBar.setTitleTextAttributes({ 
      UITextAttributeTextColor => UIColor.whiteColor 
     }) 
     end 
     @window.makeKeyAndVisible 

     @window.tintColor = '#DF533B'.to_color 
    end 
+1

添加一個「等待」視圖/視圖控制器。 – Larme

回答

2

是的,可以,但它不應該做的事。當您將應用程序加載到內存中時會顯示「閃屏」屏幕。您可以延遲刪除所有此屏幕bij不直接從application:didFinishLaunchingWithOptions:方法返回。 但是這樣做可能會讓你的應用被os所殺,因爲加載需要很長時間。

您最好選擇在UIWindow中放置一個顯示您的應用正在下載數據的視圖。這樣你的用戶就可以看到你的應用正在做一些事情。如果有可能在這裏表現出某種進步,甚至會更好。

甚至可以在執行網絡調用的視圖控制器中執行此操作,只需在啓動netwerk調用之前將加載視圖推送到視圖即可。一旦完成,刪除視圖。這隻有在網絡調用不阻止任何UI更新時纔有效。

+0

謝謝..不知道應用商店的限制。所以說,我有一個簡單的觀點,用UIWindow中的「加載」一詞...我怎麼才能在從服務器加載數據的時候顯示它?我正在使用AFNetworking來加載數據。 – birdy

+0

這完全取決於你的代碼,沒有genic的方式來做到這一點。這不是AppStore的限制,iOS會殺死那些不能及時啓動的應用程序。 – rckoenes

+0

聽起來不錯。我用一些代碼更新了問題,這些代碼顯示了我如何加載數據,然後顯示我的控制器。如果它進一步幫助... – birdy

-1

「啓動畫面」或您設置爲Default.png的內容不能設置爲更長。直到您的應用程序啓動纔會顯示。您也認爲您的應用程序停留在黑屏上是正確的,因爲提取可能需要很長時間。

要解決這個問題,你可以做幾件事情。

  1. 將數據提取移至除了mainThread之外的其他線程,以便UI未鎖定,然後在數據完成下載後刷新視圖。當發生這種情況時,你可以顯示一個微調或任何你想要的。

[self showLoadingView]; 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 

    [self doDataFetch]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 

     [self hideLoadingView]; 
     [self reloadView]; 
    }); 
}); 

  1. application:didFinishLaunchingWithOptions推出顯示出不同的控制器,然後在後臺下載自己的數據時做到這一點表明,要求數據的視圖控制器。

問題是你不應該在mainThread上進行數據提取。 在背景中做它。這將防止UI鎖定,並且應用程序需要很長時間才能加載。

+0

我正在使用AFNetworking來獲取數據。這應該是在設計權利背景下做到的? – birdy

+0

我用代碼更新了問題,顯示了我如何加載數據和顯示控制器 – birdy

+0

我知道objective-c接口通常是因爲它使用塊,但它看起來像你的代碼沒有。給我client.shared.get('categories')做|結果|如果result.success?似乎會阻止它,因爲它會執行get操作,然後在執行if之前等待它完成。 – Pete42

相關問題