【问题标题】:Launch screen delay works in iOS Simulator but not Device启动屏幕延迟适用于 iOS 模拟器,但不适用于设备
【发布时间】:2012-01-31 05:31:39
【问题描述】:

我使用下面的代码将启动屏幕设置为仅显示 1 秒 sleep(1);在应用程序委托中,但是当直接在设备上进行测试时,我必须等待整整 5 秒。

每次我使用 iPhone 或 iPad 运行测试时,我都必须等待完整的 5 秒默认值才能加载应用程序,但是,它在模拟器中运行良好。

如果我拔下 iPhone 数据线,sleep() 函数会在设备上运行。 xCode 中是否有此设置?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
       sleep(1);

...

}

【问题讨论】:

  • 为什么要让它休眠?
  • 我读过的教程给我的印象是,sleep(1) 设置了启动屏幕延迟?
  • 不,它不会设置启动屏幕延迟,它只会进一步延迟应用启动。你不需要那个。

标签: objective-c xcode xcode4 splash-screen


【解决方案1】:

为了延迟启动屏幕,这不是推荐的方法。这只是延迟了整个过程。

我建议您在项目的最开始添加一个新的viewController,该UIImageView 将在启动屏幕后立即显示,其中包含与启动图像完全相同的图像。

然后在切换到原始的第一个屏幕之前从那里添加延迟。这样,您甚至可以为启动图像添加新的不同类型的过渡。

#import "OrginalController.h"

- (void) gotoOrginalFirstScreen
{
        // This function will take you to your oringinal first screen
        // from the temporary screen with the launch image
        OrginalController *controller = [[OrginalController alloc] initWithNibName:@"OrginalController" bundle:nil];
        controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentViewController:controller animated:YES completion:nil];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // add this line to call the transition and the delay
    [self performSelector:@"gotoOrginalFirstScreen" withObject:nil afterDelay:1.0];

}

【讨论】:

  • 如果我想将整体延迟设置为 1 秒,是否仍建议这样做?
  • 我认为在应用程序委托中设置延迟是一种不好的做法。虽然我不是专家建议
  • 好的,只是想让延迟消失。我不需要 5 秒的启动屏幕。也许这只是一个 xCode 错误。不过感谢您的帮助。
  • @jhilgert00:您无法完全消除延迟。通过使用sleep 或呈现其他启动视图,您只会使其更长。由于调试器通过XCode启动应用程序时延迟较长,需要时间附加到进程。
  • @Andrey Z:非常感谢!
【解决方案2】:

您可以显示启动屏幕,而无需将其置于睡眠状态。您也不需要单独的视图控制器。这种方法在任何地方都可以使用,也不会给您带来麻烦。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{
 imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"splashscreen.png"]];
imageView.frame = CGRectMake(0, 0, 324, 480);
[window addSubview:imageView];
[self.window makeKeyAndVisible];

[self performSelector:@selector(firstscreen) withObject:nil afterDelay:1.0];
return YES;     
}


-(void)firstscreen
{
        // Load some View

}

你可以把它放在你的应用程序委托中,这将显示你的启动图像 1 秒,之后将加载下一个屏幕。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2011-03-08
    • 2015-02-13
    • 2011-03-20
    相关资源
    最近更新 更多