5

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

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

  2. 每次app启动时删除plist中的launch image属性,显示另一个imageview或uiview,改变imageview的图片;

第一种方式,有人说苹果可能会拒绝该应用程序,也可能不会被批准。有可能是这种情况吗?

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

4

3 回答 3

7

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

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

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

于 2013-06-04T08:27:43.140 回答
4

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

这是因为作为 Apple App Store 提交的一部分,主捆绑包的内容经过加密(想想就是它的拼写方式)签名。因此,修改主包中的内容可能会导致应用程序停止运行。

这也违反了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
于 2013-06-04T08:30:21.887 回答
2

启动图像本身不可更改,因为它在您的捆绑包中。最好的方法是尽快显示 UIImageView。

这意味着: applicationDidFinishLaunching 应该只放置窗口和图像视图,然后安排实际工作。尽快返回 YES - 这样,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;
}
于 2013-06-04T08:33:05.337 回答