iOS启动画面持续时间(Default.png)

时间:2012-04-04 08:51:44

标签: ios objective-c ios5

即时为我的iPad应用程序使用 Default.png 文件。它看起来正确,但我无法找到一种方法来修改启动画面的持续时间。有人有什么建议吗?谷歌有很多网站展示如何设置启动屏幕,但无法为我的问题找到解决方案。

7 个答案:

答案 0 :(得分:17)

Human Interface Guidelines for Splash Screens的第一条规则是:不要使用启动画面。第二条规则是:不要使用启动画面!:

  

提供启动图像以改善用户体验。

     

避免使用您的启动图片作为提供的机会:

     

“应用程序输入体验”,例如启动画面

     

关于窗口

     

品牌元素,除非它们是应用程序第一个屏幕的静态部分

如果你绝对必须包含一个长时间的启动画面,并且这样做有很好的理由,通常的方法是抛出一个UIImageView,其中包含你的启动图像副本,例如{{ 1}} - 这应该提供长时间闪屏的幻觉。

但请不要。

答案 1 :(得分:10)

使用“启动画面”(徽标等)不是Default.png的想法!

阅读Apple的HIG

(启动)屏幕(名为加载屏幕)不适用于显示的徽标或类似内容。 启用多任务处理后,“启动画面”显示非常罕见。 像苹果应用程序一样,启动画面应该只显示第一个应用程序屏幕中出现的界面,没有任何本地化的字符串等。

还要记住: iOS设备获得的速度越快,您可以看到Default.png越短。因此,请避免将其用于任何重要的CI / CD内容。

答案 2 :(得分:6)

应用程序加载时会显示默认图像,并在应用程序准备就绪后立即关闭。并且没有API来控制持续时间。

答案 3 :(得分:1)

您无法从技术上修改“默认”图片停留的持续时间;它被设计成只是一个临时图像“预示”应用程序实际启动,并不是专门设计为闪屏。

我建议您在-application:didFinishLaunchingWithOptions:方法中启动应用程序时,通过向屏幕添加图像视图来保持“启动画面效果”。然后,您可以设置一个计时器,该计时器调用一个方法,在指定的时间之后关闭启动画面。它会比你指定的时间长一些,具体取决于应用加载的实际时间,但它会产生你想要的效果。

您可以将图像视图的图像设置为[UIImage imageNamed:@“Default”],它将为您访问该默认图稿。

答案 4 :(得分:0)

您无法更改持续时间。如果您希望它显示的时间更长,您可以将相同的图像添加到您在加载数据时显示的视图中!

答案 5 :(得分:0)

这里有一篇很好的博客文章,介绍如何使用带有计时器的UIImageView创建启动画面:

http://nullpointr.wordpress.com/2012/02/19/iphone-dev-how-to-implement-a-splash-screen/

对初学者很有用,他们仍在学习在iOS中做事的最佳方法。

答案 6 :(得分:0)

正如@Conrad Shultz所说,只有Xcode提供的LaunchScreen.storyboard文件才能使用启动画面。

但是,在极少数情况下,您确实需要延长启动画面:

  • 在应用程序启动之前下载大量文件,因为应用程序依赖于它们。
  • 其他原因......

这是做到这一点的方法:

AppDelegate内,didFinishLaunchingWithOptions下你应该:

  1. 创建一个具有相同启动图像和相同约束
  2. 的VC
  3. 介绍
  4. 在给定时间后将其解雇
  5. 代码:

    let splashVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "splash")
    
        window?.makeKeyAndVisible()
    
        if let root = window?.rootViewController
        {
            root.present(splashVC, animated: false, completion: nil)
            let dispatchTime = DispatchTime.now() + 3
    
            // didFinishLaunchingWithOptions will return and this block will be executed afterwards, hence, async..
            DispatchQueue.main.asyncAfter(deadline: dispatchTime, execute: {
                root.presentedViewController?.dismiss(animated: false, completion: nil)
            })
        }
    }