【问题标题】:Display splash/loading screen longer on iPhone在 iPhone 上显示启动画面/加载屏幕的时间更长
【发布时间】:2012-04-23 02:07:22
【问题描述】:

我有一个加载速度非常快的简单 iPhone 应用程序,因此启动画面仅显示几分之一秒。有什么方法可以控制启动画面显示多长时间?我四处搜寻,并没有发现任何似乎可行的东西。我必须用我的启动图像创建一个子视图吗?如何控制它的显示时间并在子视图和主视图之间切换?

【问题讨论】:

  • 延长启动画面的持续时间给用户的印象是您的应用程序很慢并且需要很长时间才能加载。这与你在 iPhone 上想要的相反,如果你的应用程序很慢,人们不会喜欢它,他们会删除它。
  • 我理解你的观点,这很有意义。但是,就我而言,我没有将它提交到应用商店,它是针对软件类的,我只需要我的名字和徽标出现足够长的时间即可看到。谢谢
  • 这里有一篇很好的博客文章,介绍了如何使用带有计时器的UIImageView 创建启动画面:nullpointr.wordpress.com/2012/02/19/… 对仍在学习 iOS 中做事的最佳方式的初学者很有用.

标签: iphone objective-c xcode xcode4 splash-screen


【解决方案1】:

虽然我同意这里所说的一切,但我还必须实现一次带有计时器的启动画面,所以这里是代码:

- (void)showSplashWithDuration:(CGFloat)duration
{
    // add splash screen subview ...

    UIImage *image          = [UIImage imageNamed:@"Default.png"];
    UIImageView *splash     = [[UIImageView alloc] initWithImage:image];
    splash.frame            = self.window.bounds;
    splash.autoresizingMask = UIViewAutoresizingNone;
    [self.window addSubview:splash];


    // block thread, so splash will be displayed for duration ...

    CGFloat fade_duration = (duration >= 0.5f) ? 0.5f : 0.0f;
    [NSThread sleepForTimeInterval:duration - fade_duration];


    // animate fade out and remove splash from superview ...

    [UIView animateWithDuration:fade_duration animations:^ {
        splash.alpha = 0.0f;
    } completion:^ (BOOL finished) {
        [splash removeFromSuperview];
    }];
}

只需在 AppDelegate 的 -applicationDidFinishLaunching:withOptions: 方法中的某处调用该函数


@asgeo1: 代码对我来说很好用(我在几个项目中使用过类似的代码)。为了您的方便,我在我的 Dropbox 上添加了example project

【讨论】:

  • 我认为这行不通。这与只调用 sleep(); 没有什么不同。在我的测试中,我可以将“Default.png”更改为不存在的图像 - “DoesNotExist.png”,并且它仍然会在持续时间内显示“启动”屏幕 - 但只是因为它正在睡觉。它实际上根本不渲染引用的图像。我不会推荐这种方法。
  • @asgeo1:为方便起见,我添加了一个示例项目,以便您自己查看代码运行良好。
  • 感谢您的示例。但我认为你没有理解我所说的。是的 - 调用 sleep() 将导致“加载图像”(如 plist 中指定)显示一段时间。但是您的其余代码是多余的。那里创建 UIImageView 的位不起作用。不相信我?尝试将Default.png 更改为其他图像。它不起作用 - 显示默认图像是因为这只是 iOS 显示来自 plist (UILaunchImageName) 的加载图像,而不是因为您已将 UIImageView 添加到窗口!
  • 您可以删除除对sleepForTimeInterval 的调用之外的所有代码,并且得到相同的结果。我的观点是,阻塞线程并不是最好的方法。请参阅此示例以了解如何完成:nullpointr.wordpress.com/2012/02/19/…
【解决方案2】:

现在,我完全同意上面的帖子,您不应该这样做,但如果您仍然愿意,可以通过将以下内容添加到您的 AppDelegate.m 来轻松实现。

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    sleep(2);
}

“2”代表睡眠的秒数。它将接受像“.5”这样的值

【讨论】:

  • 不适合我,因为从视图转换到另一个视图时会出现空白
【解决方案3】:

虽然我同意这里和另一个关于为什么不应该“滥用”默认屏幕的问题中表达的观点,但在我看来要达到这种效果是微不足道的:

启动时,只需放置一个看起来与启动屏幕完全相同的视图并使用NSTimer 将其关闭。真的很简单。

// viewDidLoad
[self performSelector:@selector(dismiss) 
           withObject:nil 
           afterDelay:yourTimeIntervalInSectons];
// dismiss
[self performSegueWithIdentifier:@"ID" sender:nil];

但是,不要在每次应用程序激活时都显示启动画面。我曾经在我的应用程序的上下文中出于非常具体和有用的目的这样做 - 但 Apple 拒绝了它。嘿,他们甚至在星期六晚上打电话给我解释。

【讨论】:

  • 我的意思是——如果你不想自己解决这个简单的问题,你将如何学习编程?请参阅上面的代码,请投票并勾选复选标记。
【解决方案4】:

不要这样做和/或在这里阅读原因

iOS Duration of Splash Screen (Default.png)

延长 Default.png 的持续时间确实没有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    相关资源
    最近更新 更多