如何在iPhone上显示更长的启animation面?

如何在iPhone上显示比默认时间更长的启animation面?

阅读苹果iPhone人机接口指南(HIG)。 “闪屏”不应该用于品牌或显示徽标,它应该看起来像应用程序的默认条件,所以它似乎很快启动。

让它在那里停留更长时间将违反HIG。

最简单的方法是创build一个UIImageView,其图像是您的Default.png。 在您的applicationDidFinishLaunching:方法中,将该图像视图添加到您的窗口中,并在想要启动屏幕消失时将其隐藏起来。

我需要这样做来阻止显示表视图,直到数据通过networking加载。 我使用了我在这里find的一个变体:

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的方法使用一个睡眠函数。 在睡眠function中传递一个数字, 你想要保持屏幕的秒钟。

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [window makeKeyAndVisible]; [window addSubview:viewController.view]; sleep(5); return YES; } 

我为这件事情search了很多,每个人都有自己的观点。 我找不到一个简单的方法,只是让我这样做。

KISS(保持简单和智能:)我避免了实际的攻势。

我很简单,通过让我的rootViewController推送一个modalViewController,从“Splash.nib”加载我称为“SplashViewController”的UIViewController的子类中。 确切的电话是:

 - (void) viewDidLoad { SplashViewController *splashScreen = [[[SplashViewController alloc] initWithNibName:@"SplashViewController" bundle:nil] autorelease]; [self presentModalViewController:splashScreen animated:NO]; //continue loading while MVC is over top... 

当你启动应用程序时,它会popup,就像一个闪屏应该。 然后,SplashViewController的笔尖只是一个全屏UIImageView与飞溅png,320×480。 在1秒钟的NSTimer之后(其他的事情似乎都陷入了困境),它触发了timerFireMethod,一个自定义的方法,它只是调用

 [self dismissModalViewControllerAnimated:YES]; 

然后模态的VC只是滑落,离开我的顶级tableView。 好的是,在MVC启动时,由于模态视图控制器的独立性,底层表可以继续加载 。 所以,我不认为这违反了HIGs,而且实际上允许更快的启动。 你更愿意看什么,一张可爱的照片,或一个空的默认视图(打鼾)?

即使这是违背准则,但如果你仍然想这样做比一个更好的方法,而不是睡觉的线程将是

 //Extend the splash screen for 3 seconds. [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]]; 

这样主线程就不会被阻塞,如果它正在监听任何通知和一些其他networking相关的东西,它仍然继续。

更新SWIFT:

  NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow:3)) 

是的,最简单的方法是(记得将'default.png'添加到目标 – > [yourProjectName]:在'xCode'中启动图像):

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [NSThread sleepForTimeInterval:3.0]; } 

让您的应用程序花费更长时间加载。

保罗·汤姆林(Pau​​l Tomblin)认真地说,这通常不是一个好主意。 Default.png是一种机制,旨在通过保持“空白”屏幕截图,让您的应用看起来更快加载。 使用它作为启animation面是一个小小的滥用,但有意让这个启animation面出现的时间比它需要的时间更长。 (这也会降低用户的体验,请记住,每一秒都会看到启animation面,只有用户不耐烦地盯着你的标志,他们发誓他们会转向他们能find的第一个体面的竞争对手。)

如果你试图掩盖某种次要的加载 – 例如,如果接口已经加载,而你只是等待从networking上获取一些数据 – 那么这可能是好的,本戈特利布的方法是好的。 我build议添加一个进度条或微调,以使用户清楚真正在进行的事情。

只需使用睡眠(时间以秒为单位); 在你的applicationDidFinishedLaunching方法中

这是我简单的启animation面代码。 'splashView'是包含图像标识,UIActivityIndi​​cator和“Load ..”标签(添加到IB中的MainWIndow.xib)的视图的出口。 活动指示器在IB中设置为“animation”,然后产生一个单独的线程来加载数据。 完成后,我删除splashView并添加我的正常应用程序视图:

 -(void)applicationDidFinishLaunching:(UIApplication *)application { [window addSubview:splashView]; [NSThread detachNewThreadSelector:@selector(getInitialData:) toTarget:self withObject:nil]; } -(void)getInitialData:(id)obj { [NSThread sleepForTimeInterval:3.0]; // simulate waiting for server response [splashView removeFromSuperview]; [window addSubview:tabBarController.view]; } 
  Inside your AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Sleep is code to stop the slash screen for 5MoreSeconds sleep(5); [self initializeStoryBoardBasedOnScreenSize]; return YES; } 

// VKJ

在Xcode 6.3中,你可以显示启动screen.xib,甚至在它上面放置一个指示器,首先它会显示默认的启animation面,它被replace为笔尖,所以用户不知道它改变,然后如果一切都加载隐藏它:-)

  func showLaunchScreen() { // show launchscreen launchView = NSBundle.mainBundle().loadNibNamed("LaunchScreen", owner: self, options: nil)[0] as! UIView launchView.frame = self.view.bounds; self.view.addSubview(launchView) // show indicator launchScreenIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50)) as UIActivityIndicatorView launchScreenIndicator.center = CGPointMake(self.view.center.x, self.view.center.y+100) launchScreenIndicator.hidesWhenStopped = true launchScreenIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray launchView.addSubview(launchScreenIndicator) self.view.addSubview(launchView) launchScreenIndicator.startAnimating() self.navigationController?.setNavigationBarHidden(self.navigationController?.navigationBarHidden == false, animated: true) //or animated: false } func removeLaunchScreen() { println("remove launchscreen") self.launchView.removeFromSuperview() self.launchScreenIndicator.stopAnimating() self.navigationController?.setNavigationBarHidden(false, animated: true) } 

编写一个实际的启animation面类。

这是一个可以自由使用的启animation面,我最近在我的iPhone动作博客中发布: http : //iphoneinaction.manning.com/iphone_in_action/2009/03/creating-a-splash-screen-part-one.html

最简单的方法是将您的应用程序的主线程进入睡眠模式一段时间。 假设你的应用程序包中存在“Default.png”,只要主线程睡着,它就会显示出来:

-(void)applicationDidFinishLaunching:(UIApplication *)application { [NSThread sleepForTimeInterval:5]; window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; [window setBackgroundColor:[UIColor yellowColor]]; [window makeKeyAndVisible]; }
-(void)applicationDidFinishLaunching:(UIApplication *)application { [NSThread sleepForTimeInterval:5]; window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; [window setBackgroundColor:[UIColor yellowColor]]; [window makeKeyAndVisible]; } 

正如你已经知道,这是一个可怕的主意,但它应该工作得很好…

只需要在applicationDidFininshLaunchings方法中让窗口hibernate几秒钟

例如:睡觉(3)

根据苹果HIG,你不应该这样做。 但是,如果您的应用程序需要这样做的确定的目的,你可以这样做:

  • 在AppDelegate.m中导入<unistd.h>
  • 在“应用程序didFinishLaunchingWithOptions:”方法的第一行中写入以下行

    sleep(//your time in sec goes here//) ;

我做了如下:

 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"LaunchScreen" bundle:nil]; UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"splashView"]; self.window.rootViewController = viewController; 

注意:LaunchScreen是发布故事borad,splashView是storyboardIdentifier

对于时尚的启animation面教程看看这个http://adeem.me/blog/2009/06/22/creating-splash-screen-tutorial-for-iphone/

我同意在应用程序启动时有一个启animation面是有意义的,特别是如果它需要首先从网站获取一些数据。

至于下面的苹果HIG – 看看(MobileMe)的iDisk应用程序; 直到您注册您的会员详细信息,应用程序显示一个典型的uitableview Default.png之前非常快速地显示全屏视图。

我所做的是在初始屏幕中显示一个模态视图控制器,然后在几秒钟后解散

  - (void)viewDidLoad { [super viewDidLoad]; .... saSplash = [storyboard instantiateViewControllerWithIdentifier:@"SASplashViewController"]; saSplash.modalPresentationStyle = UIModalPresentationFullScreen; [self presentModalViewController: saSplash animated:NO]; } -(void) dismissSASplash { [saSplash dismissModalViewControllerAnimated:NO]; } 

这里已经发布了很多选项,但是我今天碰到了cocoapod,它允许您将LaunchScreen.xib的内容显示为初始视图控制器:

https://github.com/granoff/LaunchScreen ( 更多实现细节,请参阅作者的博客文章 。)

这似乎是一个相当直接的方式来做到这一点,比这里发布的绝大多数答案更好。 (当然,直到首先引入LaunchScreen文件LaunchScreen可能)。可以在视图顶部显示一个活动指示器(或其他你想要的东西)。

至于你为什么要这样做,我感到惊讶的是,没有人提到这种事情经常有出版商和/或合作伙伴的要求。 这在游戏中非常普遍,但广告资助的应用程序也是如此。

另外请注意,这不会违背HIG,但是在应用程序启动之后等待加载任何内容也是如此。 请记住,HIG是指导性的,而不是要求。

最后一点:这是我个人的看法,任何时候这样的初始屏幕都会被执行,你应该可以点击来解除它。

Swift 2.0

在didFinishLaunchingWithOptions中使用以下行:委托方法:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { NSThread.sleepForTimeInterval(5.0) return true } 

但是我推荐这个:

把你的图像放在UIImageView的全屏幕上,作为主视图顶部的子视图,从而覆盖你的其他用户界面。 设置一个计时器,在几秒钟后(可能有效果)现在显示您的应用程序将其删除。

 import UIKit class ViewController: UIViewController { var splashScreen:UIImageView! override func viewDidLoad() { super.viewDidLoad() self.splashScreen = UIImageView(frame: self.view.frame) self.splashScreen.image = UIImage(named: "Logo.png") self.view.addSubview(self.splashScreen) var removeSplashScreen = NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: "removeSplashImage", userInfo: nil, repeats: false) } func removeSplashImage() { self.splashScreen.removeFromSuperview() } } 

当您启动应用程序时会显示默认图片(default.png)。

因此,您可以添加一个新的viewcontroller,它将在应用程序didFinishLoading中显示该默认图像。

所以通过这个逻辑,你可以稍微显示默认的图像。

Swift版本:

在AppDelegate中添加这一行

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { NSThread.sleepForTimeInterval(2.0)//in seconds return true }