可以配置启动画面时间吗?

时间:2014-04-24 12:38:52

标签: ios ios7 afnetworking rubymotion

我有一个应用程序,第一个用户看到的屏幕上有从服务器获取的数据。该应用程序还有一个启动屏幕,显示加载应用程序时。

问题 根据用户连接时间,可能需要几秒钟才能加载数据。在这种情况下,启动画面会出现几秒钟然后我只看到一个空白(黑色)屏幕再过几秒钟,然后我看到第一个屏幕。我怀疑从服务器获取数据所需的时间是空白屏幕。我在寻找解决这个问题的方法

问题

  • 是否可以配置启动画面显示的时间长度?例如,启动屏幕可能会一直保持到数据被提取为止?
  • 在加载数据时,是否可以显示某种微调器而不是黑色空白屏幕?

更新

这就是我加载数据的方式

  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

2 个答案:

答案 0 :(得分:2)

是的它可以,但不应该这样做。 " splash"当您将应用程序加载到内存中时会显示屏幕。您可以延迟删除所有此屏幕bij,而不是直接从application:didFinishLaunchingWithOptions:方法返回。 但这样做可能会让你的应用程序被操作系统杀死,因为加载需要很长时间。

您可以选择在UIWindow中放置一个显示您的应用正在下载数据的视图。这样您的用户就会看到您的应用正在做某事。如果可以在这里展示某种进步甚至更好。

您甚至可以在执行网络呼叫的视图控制器中执行此操作,只需在启动netwerk呼叫之前将加载视图推送到视图即可。完成后删除视图。仅当网络呼叫未阻止任何UI更新时,此功能才有效。

答案 1 :(得分:-1)

“启动画面”或您设置为Default.png的内容不能设置得更长。它仅在您的应用程序启动之前显示。您也可以认为您的应用程序停留在黑屏上,因为提取可能需要很长时间。

要解决这个问题,你可以做几件事。

  1. 将数据提取移动到除mainThread之外的其他线程,以便UI不被锁定,然后在数据下载完成后刷新视图。当发生这种情况时,你可以展示一个微调器或任何你想要的东西。
  2. [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启动时显示不同的控制器,然后在后台下载您的数据,完成后显示需要数据的视图控制器。
    2. 外卖是你不应该在mainThread上进行数据获取。 做好背景。这将阻止UI锁定,并且应用程序需要很长时间才能加载。