每次启动时更改应用程序的启动图像

时间:2013-06-04 08:10:19

标签: iphone ios objective-c cocoa

我想在每次打开时更改应用的启动图像。我在Google上搜索过,我发现了两种方法:

  1. 在plist配置文件中设置我的启动图像名称,并每次都替换图像文件。

  2. 每次应用启动时删除plist中的启动图像属性,显示另一个imageview或uiview,并更改imageview的图像;

  3. 第一种方式,有些人说苹果可能拒绝该应用程序,或者可能未获批准。这可能是这种情况吗?

    第二种方式,我的应用程序配置和加载后需要很长时间才能在加载过程中显示黑屏。

3 个答案:

答案 0 :(得分:7)

我建议您在代码中执行此操作,也可以使用 UIImageView 显示您自己的“虚拟”启动屏幕。

您要实现的目标是不可能的,在归档您的应用程序时,会签署ipas(因此其内容,包括Info.plist)。这意味着您所做的任何修改都会破坏签名,因此您需要重新签名以使其再次可执行。实现此目的的唯一方法是再次签署您的内容并再次将应用程序提交到AppStore,这会使您的论点无效。

采用UIImageView方法,我知道它不会看起来那么好,但考虑到Apple生态系统所施加的限制,它是你能得到的最接近的方法。

答案 1 :(得分:3)

简单的答案是您不能这样做。这是因为您必须修改的图像是Default.png,它是位于项目主包中的启动图像名称,不允许编辑/修改/修改主包中的文件一个iOS项目。

这是因为主要包的内容是加密的(认为它是如何拼写的)作为Apple App商店提交的一部分签名。因此,修改主bundle中的内容可能会导致应用程序停止运行。

这也违反了Apple submission guidelines

此外,虽然有些人建议在启动后通过动画代码执行此操作,但仍需要启动图像,因为它是Apple人机界面指南的一部分。所有应用都必须有一张启动图片。

您唯一可以拥有不同发布图像的时间是基于设备和/或视网膜显示和/或方向。

以下是您可以使用的一些内容。

Default.png
Default@2x.png
Default-568h.png or Default-568h@2x.png
Default-Portait.png
Default-Portait@2x.png
Default~ipad.png
Default-Portait~ipad.png
Default@2x~ipad.png
etc

答案 2 :(得分:2)

启动图片本身不会因为您的捆绑包而改变。最好的方法是尽快显示UIImageView。

这意味着:applicationDidFinishLaunching应该只是放置窗口和图像视图,并在以后安排实际工作。尽快返回 - 这样,iOS会认为您的应用已启动并使用uiimageview显示您的窗口

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // show the main window, overlay with splash screen + alpha dissolve...
        UIImageView *splashScreen = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]];
    [self.window addSubview:splashScreen];        
    [self.window makeKeyAndVisible];

        // in the method do all you normally do
    [self performSelector:@selector(delayedLaunch:) withObject:options afterDelay:0.1];

    [UIView animateWithDuration:0.3 animations:^{splashScreen.alpha = 0.0;}
                     completion:(void (^)(BOOL)) ^{
                             [splashScreen removeFromSuperview];
                     }
    ];

    return YES;
}