如何在iPhone上显示更长时间的启动画面?

49 cocoa-touch splash-screen

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

Pau*_*lin 39

阅读Apple iPhone人机界面指南(HIG)."启动画面"不应该用于品牌或显示徽标,它应该看起来像应用程序的默认条件,因此它似乎可以快速启动.

让它在那里停留更长时间会违反HIG.

  • 这根本不回答这个问题.问的问题是"如何?",而不是"我应该吗?". (104认同)
  • 有时"不做"是"如何"的最佳答案. (70认同)
  • @Paul Tomblin:我理解你的观点,但它确实不是重点.我认为一个友好的警告加上"但是,如果你真的想这样做,......"的反应可能是最好的方法.思考? (32认同)
  • 作为参考,我同意你不应该这样做,但我仍然不同意这种回答方式.我同意不同意;) (18认同)
  • 谢天谢地,下面有一些有用的答案.是的,我理解感觉像一个正直的纯粹主义者的喜悦 - 但纽约时报的应用程序做了类似的事情,这是一个很好的方式来启动该应用程序.它会带来更多用户喜悦,而不是更少.Apple警察并没有拒绝该应用程序,因为他们知道他们无法解决所有情况 - 他们会让我们的开发人员发挥创意. (12认同)
  • @Paul Tomblin,我发现Default.png以一种丑陋的,类似混蛋的方式捕捉到我的第一个视图.如果我想要转换说,淡入,那么你需要像@Ben描述的那样.或者应用程序可能需要在加载后继续下载信息,并希望用户再等一下.在不违反HIG的文字或精神的情况下,有很多理由这样做. (4认同)
  • 不,抱歉保罗,问题是"如何". (3认同)
  • 那么,@ korona,你怎么做*你告诉别人他们问的怎么做是他们真的,除了回答这个问题之外真的应该做的事情吗? (2认同)
  • 不,这不是重点.如果问题是"你在哪里隐藏你的房子钥匙,因为我想偷你的东西",如果我的答案是"不要那样做",你会谴责我吗?而不是"一个友好的警告加上'然而......'? (2认同)

Ben*_*ieb 26

最简单的方法是创建一个UIImageView,其图像是Default.png.在您的applicationDidFinishLaunching:方法中,将该图像视图添加到您的窗口,并在您希望您的启动画面消失时隐藏它.

  • 因为如果名称为default.png,Apple会默认识别默认图像 (14认同)

nev*_*ing 21

我需要这样做才能阻止显示表视图,直到数据通过网络加载.我使用了一个我在这里找到的变体:

http://michael.burford.net/2008/11/fading-defaultpng-when-iphone-app.html

在App Delegate的界面中:


@interface AppDelegate : NSObject 
{
  UIImageView *splashView;
}
Run Code Online (Sandbox Code Playgroud)

在实施中:


@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];
}

Run Code Online (Sandbox Code Playgroud)

确保资源中有Default.png


Tai*_*mal 18

在你的appDelegate中,一个叫做applicationDidFinishedLaunching的方法使用一个sleep函数.在睡眠功能中传递一个数字为no.想要保持屏幕的秒数.


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

Run Code Online (Sandbox Code Playgroud)

我为这件事搜索了很多,每个人都给出了他们自己复杂的观点.我找不到一个让我这么做的简单方法.

吻(保持简单和聪明:)我避免了实际的进攻.


小智 14

我做的非常简单,让我的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...
Run Code Online (Sandbox Code Playgroud)

当您启动应用程序时,它会弹出,就像启动画面一样.然后,SplashViewController笔尖只是一个全屏UIImageView,带有一个启动png,320x480.经过一秒钟的NSTimer(其他任何事情似乎都妨碍了),它会触发timerFireMethod,这是一个只调用的自定义方法

[self dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

然后模态VC只是向下滑动,离开我的顶级tableView.好处是,当MVC启动时,由于模态视图控制器的独立性,底层表可以继续加载.因此,我不认为这违反了HIG,实际上确实允许更快的启动.你更喜欢看什么,一张可爱的照片,或一个空的默认视图(打鼾)?


Ank*_*ava 14

即使它违反了指导原则,但如果你仍然希望这样做而不是一个更好的方法,而不是睡眠线程

//Extend the splash screen for 3 seconds.
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]];
Run Code Online (Sandbox Code Playgroud)

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

SWIFT更新:

 NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow:3))
Run Code Online (Sandbox Code Playgroud)


Cha*_*son 11

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [NSThread sleepForTimeInterval:3.0];
}
Run Code Online (Sandbox Code Playgroud)