2014-04-24 25 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

相关问题