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



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

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

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

第一种方式,一些人说苹果可能会拒绝这个应用程序,或者它可能不会被批准。情况可能是这样吗?

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

我建议你在代码中这样做,也就是使用UIImageView显示你自己的"虚拟"启动屏幕。

你想要实现的是不可能的,ipas(因此它们的内容,包括Info.plist)在你存档你的应用程序时被签名。这意味着你所做的任何修改都会破坏签名,所以你需要辞职使它再次可执行。要做到这一点,唯一的方法就是再次为你的内容签名,并再次将应用提交到AppStore,这样你的参数就失效了。

使用UIImageView方法,我知道它看起来不太好,但考虑到苹果的生态系统所施加的限制,这是最接近的方法。

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

这是因为主包的内容是加密的(想想它是怎么拼写的)作为Apple App store提交的一部分签署的。因此,修改主包中的内容可能会导致应用程序停止运行。

这也违反了苹果提交指南。

虽然有些人建议在启动后通过代码和动画来实现,但你仍然需要一个启动图像,因为这是苹果人机界面指导方针的一部分。所有应用程序必须有一个启动图像。

你可以有不同的启动图像的唯一时间是当你基于设备和/或视网膜显示和/或方向。

这里有一些你可以使用的。

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

启动图像本身是不可更改的,因为它在你的bundle中。最好的方法是尽快显示一个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;
}

最新更新