我有一个简单的iPhone应用程序,加载非常快,因此启动画面只显示了一小部分时间。是否有任何方法来控制启动画面的显示时间?我已经搜索过了,没有找到任何看起来能够工作的东西。我需要创建一个带有我的启动图像的子视图吗?如何控制其显示时间并在子视图和主视图之间切换?
我有一个简单的iPhone应用程序,加载非常快,因此启动画面只显示了一小部分时间。是否有任何方法来控制启动画面的显示时间?我已经搜索过了,没有找到任何看起来能够工作的东西。我需要创建一个带有我的启动图像的子视图吗?如何控制其显示时间并在子视图和主视图之间切换?
虽然我同意这里和其他关于为什么不要“滥用”默认屏幕的问题所表达的观点,但在我的看法中,实现这个效果相当简单:
启动时,只需要放置一个看起来与启动画面完全相同的视图,并使用NSTimer
来关闭它。非常容易。
// viewDidLoad
[self performSelector:@selector(dismiss)
withObject:nil
afterDelay:yourTimeIntervalInSectons];
// dismiss
[self performSegueWithIdentifier:@"ID" sender:nil];
然而,不要让启动画面每次应用程序变为活动状态时都出现。我曾经为我的应用程序在特定和有用的目的背景下这样做,但是苹果拒绝了它。嘿,他们甚至在周六晚上给我打电话解释这件事。
虽然我同意这里说的所有内容,但我曾经也不得不实现一个带计时器的启动画面,所以这是代码:
- (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上添加了一个示例项目。
Default.png
更改为其他图像。它不会起作用 - 默认图像正在显示,因为这只是iOS从plist(UILaunchImageName
)显示加载图像,而不是因为您已将UIImageView添加到窗口! - asgeo1sleepForTimeInterval
的代码之外的所有代码,结果是一样的。我的观点是,阻塞线程不是做这件事情的最佳方式。请参考以下示例,了解如何正确实现:http://nullpointr.wordpress.com/2012/02/19/iphone-dev-how-to-implement-a-splash-screen/ - asgeo1AppDelegate.m
中来实现。- (void)applicationDidFinishLaunching:(UIApplication *)application
{
sleep(2);
}
UIImageView
和计时器创建启动画面:http://nullpointr.wordpress.com/2012/02/19/iphone-dev-how-to-implement-a-splash-screen/ 对于那些仍在学习iOS最佳实践的初学者非常有用。 - asgeo1