如何在比iPhone上的默认时间更长的时间内显示启动画面?
阅读Apple iPhone人机界面指南(HIG)."启动画面"不应该用于品牌或显示徽标,它应该看起来像应用程序的默认条件,因此它似乎可以快速启动.
让它在那里停留更长时间会违反HIG.
最简单的方法是创建一个UIImageView,其图像是Default.png.在您的applicationDidFinishLaunching:方法中,将该图像视图添加到您的窗口,并在您希望您的启动画面消失时隐藏它.
我需要这样做才能阻止显示表视图,直到数据通过网络加载.我使用了一个我在这里找到的变体:
http://michael.burford.net/2008/11/fading-defaultpng-when-iphone-app.html
在App Delegate的界面中:
@interface AppDelegate : NSObject { UIImageView *splashView; }
在实施中:
@implementation AppDelegate - (void)applicationDidFinishLaunching:(UIApplication *)application { // After this line: [window addSubview:tabBarController.view]; splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; splashView.image = [UIImage imageNamed:@"Default.png"]; [window addSubview:splashView]; [window bringSubviewToFront:splashView]; // Do your time consuming setup [splashView removeFromSuperview]; [splashView release]; }
确保资源中有Default.png
在你的appDelegate中,一个叫做applicationDidFinishedLaunching的方法使用一个sleep函数.在睡眠功能中传递一个数字为no.想要保持屏幕的秒数.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [window makeKeyAndVisible]; [window addSubview:viewController.view]; sleep(5); return YES; }
我为这件事搜索了很多,每个人都给出了他们自己复杂的观点.我找不到一个让我这么做的简单方法.
吻(保持简单和聪明:)我避免了实际的进攻.
我做的非常简单,让我的rootViewController推送一个modalViewController,从UIViewController的子类中的"Splash.nib"加载我称之为"SplashViewController".确切的电话是:
- (void) viewDidLoad { SplashViewController *splashScreen = [[[SplashViewController alloc] initWithNibName:@"SplashViewController" bundle:nil] autorelease]; [self presentModalViewController:splashScreen animated:NO]; //continue loading while MVC is over top...
当您启动应用程序时,它会弹出,就像启动画面一样.然后,SplashViewController笔尖只是一个全屏UIImageView,带有一个启动png,320x480.经过一秒钟的NSTimer(其他任何事情似乎都妨碍了),它会触发timerFireMethod,这是一个只调用的自定义方法
[self dismissModalViewControllerAnimated:YES];
然后模态VC只是向下滑动,离开我的顶级tableView.好处是,当MVC启动时,由于模态视图控制器的独立性,底层表可以继续加载.因此,我不认为这违反了HIG,实际上确实允许更快的启动.你更喜欢看什么,一张可爱的照片,或一个空的默认视图(打鼾)?
即使它违反了指导原则,但如果你仍然希望这样做而不是一个更好的方法,而不是睡眠线程
//Extend the splash screen for 3 seconds. [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]];
这样主线程就不会被阻塞,如果它正在侦听任何通知和其他一些网络相关的东西,它仍然会继续.
SWIFT更新:
NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow:3))
是的,最简单的方法是(记得将'default.png'添加到目标 - > [yourProjectName]:在'xCode'中启动图像):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [NSThread sleepForTimeInterval:3.0]; }