我有一个应用程序,第一个用户看到的屏幕上有从服务器获取的数据。该应用程序还有一个启动屏幕,显示加载应用程序时。
问题 根据用户连接时间,可能需要几秒钟才能加载数据。在这种情况下,启动画面会出现几秒钟然后我只看到一个空白(黑色)屏幕再过几秒钟,然后我看到第一个屏幕。我怀疑从服务器获取数据所需的时间是空白屏幕。我在寻找解决这个问题的方法
问题
更新
这就是我加载数据的方式
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
答案 0 :(得分:2)
是的它可以,但不应该这样做。 " splash"当您将应用程序加载到内存中时会显示屏幕。您可以延迟删除所有此屏幕bij,而不是直接从application:didFinishLaunchingWithOptions:
方法返回。 但这样做可能会让你的应用程序被操作系统杀死,因为加载需要很长时间。
您可以选择在UIWindow
中放置一个显示您的应用正在下载数据的视图。这样您的用户就会看到您的应用正在做某事。如果可以在这里展示某种进步甚至更好。
您甚至可以在执行网络呼叫的视图控制器中执行此操作,只需在启动netwerk呼叫之前将加载视图推送到视图即可。完成后删除视图。仅当网络呼叫未阻止任何UI更新时,此功能才有效。
答案 1 :(得分:-1)
“启动画面”或您设置为Default.png的内容不能设置得更长。它仅在您的应用程序启动之前显示。您也可以认为您的应用程序停留在黑屏上,因为提取可能需要很长时间。
要解决这个问题,你可以做几件事。
[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];
});
});
application:didFinishLaunchingWithOptions
启动时显示不同的控制器,然后在后台下载您的数据,完成后显示需要数据的视图控制器。外卖是你不应该在mainThread上进行数据获取。 做好背景。这将阻止UI锁定,并且应用程序需要很长时间才能加载。