如何延迟Default.png的显示?

11

我该如何延迟应用程序加载时间以使闪屏界面显示更长时间?

6个回答

26
你应该让应用程序像往常一样启动,然后使第一个出现的视图与闪屏画面上的图像相同。启动计时器,几秒钟后用真正的应用程序根视图替换这个视图。
故意延迟实际应用程序的启动是不可取的。

7
与苹果公司一样,尽量避免显示“关于”窗口、启动画面或提供任何其他类型的启动体验,以免阻止人们立即使用您的应用程序。原文链接:http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/MobileHIG/HandleTasks/HandleTasks.html#//apple_ref/doc/uid/TP40006556-CH16-SW2 - Brad Larson
4
哎呀,只是问问而已。如果苹果有问题,他们自己可以责备我。他们很有能力的。 :) - Moshe
2
@Moshe:听我们说比听苹果(经过数周审核)或者更糟糕的是,你的用户说要好。无论如何,我们并不是在责备你,只是指出我们对这个话题的看法。当涉及到UI问题时,我倾向于听从苹果的意见,因为他们已经深思熟虑了很多。 - Brad Larson
1
@Brad - 话虽如此,他们已经允许通过很多带有闪屏的应用程序。我的其中一个需要在启动时预加载一些数据,而且没有比放置一个视图作为我的闪屏屏幕更好的方法了,上面还有一个进度视图。 - Dan Ray
1
@Harkonian:Default.png是为了让用户立即得到应用程序正在启动的反馈。它不是用来显示闪屏的,延迟它以便用户能够看到闪屏更长时间恰恰与其初衷相反。如果您的简单应用程序加载非常快,那是一件好事,而不是需要修复的错误,并且您应该将Default.png设置为初始用户界面的静态图像。 - Jim
显示剩余2条评论

11

更新:真的,不要这样做!

或者使用C函数

sleep(9);

把这段代码放在applicationDidFinishLaunching:中会导致程序暂停9秒,也可以输入其他整数。

编辑:我在过去的一年里学到了很多。不要这样做。原因是如果启动时间太长,springboard将自动停止应用程序的启动。这个时间点的文档记录很差,即使延迟1秒,也可能导致应用程序崩溃。


9太长了,但或许可以用一秒钟。我能放一个浮点数吗(例如:1.5)? - Moshe
我只是随便说了一个数字。你可以使用任何整数,但它必须是整数。 - Dustin Pfannenstiel
3
在applicationDidFinishLaunching中不要放置任何长时间延迟或耗时操作,应该在另一个线程中使用定时器等方式,但从applicationDidFinishLaunching尽快返回。请参考https://dev59.com/W0XRa4cB1Zd3GeqPrWjh。 - occulus
1
这种延迟在想要查看启动屏幕 xib 渲染方式时也很有帮助。 - Clifton Labrum

1
请参考上面的讨论,了解为什么您可能不应该以这种方式延迟应用程序加载。但是,如果您恰好有一个场景,在这种情况下,短暂休眠比切换视图的开销更可取,请使用NSThread的sleepForTimeInterval而不是sleep()。它更加框架友好,并且您可以更精细地控制睡眠时间:
[NSThread sleepForTimeInterval:0.75]

这种方法的问题在于它阻塞了一切。如果在睡眠时间间隔期间按下主页按钮,什么都不会发生。尝试使用更长的睡眠时间间隔并且问题更加明显。 - greenisus

1

0

我遇到了一个情况,客户需要演示启动图像。所以,这是我的解决方案...

- (void)applicationDidBecomeActive:(UIApplication *)application

{

UIImageView *defaultImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default@2x.png"]];
[self.window addSubview:defaultImageView];
sleep(2);
[defaultImageView removeFromSuperview];
[defaultImageView release];
/*
 Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
 */

}


0
你可以使用 sleep 方法得到如下结果:"

sleepForTimeInterval

",如果你想要获取启动时间,可以这样做:

- (void) applicationDidFinishLaunching:(UIApplication*)application
{
   [NSThread sleepForTimeInterval:8.0];
}

它将延迟启动8秒钟

警告:但是苹果不建议这样做,因为它会让watchdog长时间等待您的应用程序加载,这可能会导致您的应用程序被终止。 但是,如果您需要获取某些特定的屏幕截图或进行一些内部使用,您可以使用此方法解决问题,但永远不要在应用程序提交中使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接