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

5

我想在每次打开我的应用时更改启动图。我在谷歌上搜索了两种方法:

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

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

第一种方式,有些人说苹果可能会拒绝该应用程序或不予批准。这种情况可能发生吗?

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


我不确定苹果是否会接受任何一种方式。我相当确定你不应该改变启动图像,除非你更新了苹果应用商店的应用程序。我相当确定我在某个地方读到过这个信息,但我现在记不起来了,所以我没有任何依据支持这个说法。 - Popeye
你也可以使用方案#2,配合一个“通用”的启动画面,使其动画效果转换为你的新图像。 - rdurand
如果您不提供启动图像,将会被拒绝,引用人机界面指南“启动图像(所有应用程序都需要)”。 - rdurand
1
重复的问题?https://dev59.com/mmHVa4cB1Zd3GeqPoJNl - rdurand
1
@rdurand 你的意思是只能先显示一张公共图片,等应用程序完全加载后再更换另一张图片吗? - yudun1989
显示剩余2条评论
3个回答

7
我建议您在代码中完成此操作,即使用UIImageView显示自己的“虚拟”启动屏幕。您想要实现的目标是不可能的,因为当您归档应用程序时,IPA(以及其内容,包括Info.plist)会被签名。这意味着您所做的任何修改都将破坏签名,因此您需要重新签名才能使其再次可执行。唯一的方法是重新签署您的内容并再次提交应用程序到AppStore,这有点无效化了您的论点。采用UIImageView方法,我知道它看起来不太好看,但这是在Apple生态系统强加的限制下最接近的方法。

我认为如果你能很好地处理动画效果,UIImageView选项会看起来很不错! - rdurand
-1 是针对 apks 的。APKs 是安卓而不是 iOS。如果有错误将会删除。 - Popeye

4
简单的答案是不行,你不能这样做。因为你需要修改的图片是Default.png,它是iOS项目主包中的启动图像名称,不允许编辑/修改主包中的文件。
这是因为主包的内容在苹果应用商店提交时会被加密签名。因此,在修改主包内的内容可能导致应用程序停止运行。
这也违反了苹果提交指南
虽然有人建议通过代码和动画来实现启动后再更换启动图片,但你仍然需要一个启动图片,因为它是苹果人机界面指南的一部分。所有应用都必须有一个启动图片。
唯一可以使用不同启动图片的情况是基于设备和/或视网膜显示和/或方向。
以下是可供使用的一些启动图片。
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

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

启动图与闪屏不同。启动图应该在应用程序加载时给出第一印象。它是应用程序启动和实际界面初始化并放置在屏幕上之间的插页广告。 - pronebird
我同意,但很多人把启动图像称为闪屏 :) - Daij-Djan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接