在iPhone上延长闪屏/加载屏幕的显示时间

3

我有一个简单的iPhone应用程序,加载非常快,因此启动画面只显示了一小部分时间。是否有任何方法来控制启动画面的显示时间?我已经搜索过了,没有找到任何看起来能够工作的东西。我需要创建一个带有我的启动图像的子视图吗?如何控制其显示时间并在子视图和主视图之间切换?


3
延长启动画面的显示时间会让用户产生你的应用程序很慢,需要很长时间才能加载的印象。这与iPhone上想要的效果相反。如果你的应用程序很慢,人们就不喜欢它,并可能删除它。 - EmilioPelaez
1
我理解你的观点,它非常有道理。然而,对于我的情况,我不是将其提交到应用商店,而是为了软件课程,我只需要我的名字和标志出现足够长的时间以便查看。谢谢。 - Joey
这里有一篇很好的博客文章,介绍如何使用UIImageView和计时器创建启动画面:http://nullpointr.wordpress.com/2012/02/19/iphone-dev-how-to-implement-a-splash-screen/ 对于那些仍在学习iOS最佳实践的初学者非常有用。 - asgeo1
4个回答

6

虽然我同意这里和其他关于为什么不要“滥用”默认屏幕的问题所表达的观点,但在我的看法中,实现这个效果相当简单:

启动时,只需要放置一个看起来与启动画面完全相同的视图,并使用NSTimer来关闭它。非常容易。

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

然而,不要让启动画面每次应用程序变为活动状态时都出现。我曾经为我的应用程序在特定和有用的目的背景下这样做,但是苹果拒绝了它。嘿,他们甚至在周六晚上给我打电话解释这件事。


8
如果你不想自己解决这个简单的问题,那你该如何学习编程呢?请参考上面的代码,并点赞并打勾。 - Mundi

5

虽然我同意这里说的所有内容,但我曾经也不得不实现一个带计时器的启动画面,所以这是代码:

- (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上添加了一个示例项目


我认为这个不起作用。这与只调用 sleep() 没有什么不同。在我的测试中,我可以将 "Default.png" 更改为不存在的图像 - "DoesNotExist.png",但它仍会在睡眠期间显示“闪屏”屏幕,这只是因为它正在休眠,它实际上根本没有渲染引用的图像。我不建议采用这种方法。 - asgeo1
@asgeo1:为了方便起见,我已经添加了一个示例项目,这样您就可以自己看到代码运行良好。 - Wolfgang Schreurs
谢谢你的示例。但我认为你没有理解我的意思。是的 - 放置一个sleep()调用将导致“加载图像”(如plist中指定的)显示一段时间。但是,您的其余代码是多余的。创建UIImageView *的那一部分不起作用。不相信我?尝试将Default.png更改为其他图像。它不会起作用 - 默认图像正在显示,因为这只是iOS从plist(UILaunchImageName)显示加载图像,而不是因为您已将UIImageView添加到窗口! - asgeo1
你可以删除除了调用 sleepForTimeInterval 的代码之外的所有代码,结果是一样的。我的观点是,阻塞线程不是做这件事情的最佳方式。请参考以下示例,了解如何正确实现:http://nullpointr.wordpress.com/2012/02/19/iphone-dev-how-to-implement-a-splash-screen/ - asgeo1

3
现在,我完全同意以上帖子的观点,认为你不应该这么做,但如果你仍然想要这样做,可以很容易地通过将以下内容添加到AppDelegate.m中来实现。
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    sleep(2);
}

"2" 表示需要睡眠的秒数。 它可以接受像 ".5" 这样的值。

无法正常工作,因为在从一个视图转换到另一个视图时会出现空白。 - Mohamed Saleh

3

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