Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iPhone上显示较长的启动/加载屏幕_Iphone_Objective C_Xcode_Xcode4_Splash Screen - Fatal编程技术网

在iPhone上显示较长的启动/加载屏幕

在iPhone上显示较长的启动/加载屏幕,iphone,objective-c,xcode,xcode4,splash-screen,Iphone,Objective C,Xcode,Xcode4,Splash Screen,我有一个简单的iPhone应用程序,加载速度非常快,所以启动屏幕只显示了几分之一秒。有没有办法控制启动屏幕显示的时间?我到处找了找,没有找到任何似乎有用的东西。我是否必须使用飞溅图像创建子视图?如何控制其显示时间并在子视图和主视图之间切换?不要这样做和/或在此处阅读原因 延长Default.png的持续时间真的没有意义。虽然我同意这里表达的观点以及关于为什么不应该“滥用”默认屏幕的另一个问题,但在我看来,实现这一效果似乎很简单: 启动时,只需显示一个与启动屏幕完全相同的视图,然后使用NSTim

我有一个简单的iPhone应用程序,加载速度非常快,所以启动屏幕只显示了几分之一秒。有没有办法控制启动屏幕显示的时间?我到处找了找,没有找到任何似乎有用的东西。我是否必须使用飞溅图像创建子视图?如何控制其显示时间并在子视图和主视图之间切换?

不要这样做和/或在此处阅读原因


延长Default.png的持续时间真的没有意义。

虽然我同意这里表达的观点以及关于为什么不应该“滥用”默认屏幕的另一个问题,但在我看来,实现这一效果似乎很简单:

启动时,只需显示一个与启动屏幕完全相同的视图,然后使用
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的
-ApplicationIDFinishLaunching:withOptions:
方法中的某个位置调用该函数



@asgeo1:代码对我来说很好(我在几个项目中使用过类似的代码)。为了您的方便,我在我的Dropbox上添加了一个。现在,我完全同意上面的帖子,您不应该这样做,但是如果您仍然希望这样做,可以通过将以下内容添加到您的
AppDelegate.m
中来轻松实现

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    sleep(2);
}

“2”表示睡眠时间的秒数。它将接受诸如“.5”

之类的值,延长启动屏幕的持续时间会给用户一种感觉,即您的应用程序运行缓慢,加载时间较长。这与你在iPhone上想要的正好相反,如果你的应用程序速度慢,人们不会喜欢它,他们会删除它。我理解你的观点,这很有道理。然而,就我的情况而言,我并没有把它提交给应用商店,它是为了一个软件类,我只需要我的名字和徽标显示足够长的时间就可以看到。感谢这里有一篇很好的博客文章,介绍了如何使用带有计时器的
UIImageView
创建启动屏幕:对初学者很有用,他们仍在学习在iOS中做事情的最佳方法。我的意思是-如果你不想自己解决这个简单的问题,你将如何学习编程??请看上面的代码,然后投票并勾选复选标记。我认为这不起作用。这与只调用sleep()没有什么不同;在我的测试中,我可以将“Default.png”更改为一个不存在的图像——“DoesNotExist.png”,并且在整个过程中它仍然会显示“splash”屏幕,但这只是因为它处于睡眠状态。它实际上根本不会渲染引用的图像。我不推荐这种方法。@asgeo1:为了方便起见,我添加了一个示例项目,以便您自己看到代码运行良好。谢谢您提供的示例。但我想你还不明白我说的话。是-调用sleep()将导致“加载图像”(如plist中所指定)显示一段时间。但其余的代码是多余的。创建UIImageView的位不起作用。不相信我?尝试将
Default.png
更改为其他图像。它不起作用-显示默认图像是因为这只是iOS显示从plist加载的图像(
UILaunchImageName
),而不是因为您已将UIImageView添加到窗口!您可以删除除调用
sleepForTimeInterval
之外的所有代码,得到相同的结果。我的观点是,阻塞线程并不是最好的方法。请看这个关于如何完成的示例:不为我工作,因为它在从视图转换到另一视图时会显示空白