杀死后 iOS 应用程序启动图像

Posted

技术标签:

【中文标题】杀死后 iOS 应用程序启动图像【英文标题】:iOS App Launch Image After a Kill 【发布时间】:2014-01-04 23:37:35 【问题描述】:

当我终止我的 iPhone 应用程序并重新启动它时,我得到的是应用程序先前状态的图像,而不是启动图像。如何强制 ios 始终显示启动图像?

【问题讨论】:

你可以随时观察发射画面吗? 是的。启动图像在第一次运行时出现,但在 kill & relaunch 后不会出现。 您是在调试模式下测试它还是部署到设备并断开与计算机的连接? 我正在部署到我的 iPhone 并与 Mac 断开连接。 我认为这是一个系统级别的问题,等待一段时间后它会再次显示您的启动图像 【参考方案1】:

要强制 iOS 使用其默认图像启动应用程序,请调用 [[UIApplication sharedApplication] ignoreSnapshotOnNextApplicationLaunch]; 来实现状态保存。

来自documentation:

当你的应用是 重新启动后,系统会显示此快照图像来代替您的 应用程序的默认启动图像,以保留您的应用程序的概念 仍在运行。如果您觉得快照无法正确反映 当您的应用重新启动时,您的应用的用户界面,您可以调用 此方法可防止拍摄该快照图像。如果你 确实,UIKit 会使用您应用的默认启动图像。

更多详情请查看this question。

【讨论】:

hummm...我把 [application ignoreSnapshotOnNextApplicationLaunch];在我的 applicationWillResignActive 和 applicationWillTerminate 中。没用。【参考方案2】:

ignoreSnapshotOnNextApplicationLaunch 方法如果在状态恢复过程中没有调用应用,则不会调用。

如果您的应用不支持多任务功能,则其 Info.plist 中的 UIApplicationExitsOnSuspend 键设置为 YES。建议的解决方案不起作用。

对我来说,我使用了以下代码:

applicationWillResignActive用于应用程序运行时,双击home键调用多任务托盘的情况。启动画面将显示在应用程序屏幕上。它完美地工作。

applicationWillTerminate 并非每次都有效,因为在某些阶段可能永远不会调用该函数

- (void)applicationWillResignActive:(UIApplication *)application 

    NSLog(@"Application Did Resign Active");
    self.viewController.webView.hidden = YES;

    NSString *splashImage;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
        splashImage = @"Default-Portrait~ipad.png";
    
    else 
        splashImage = @"Default~iphone.png";
    

    UIImageView *splash = [[UIImageView alloc]initWithFrame:[self.window frame]];
    [splash setImage:[UIImage imageNamed:splashImage]];
    [self.window addSubview:splash];



- (void)applicationWillTerminate:(UIApplication *)application 

    NSLog(@"Application is Terminated");
    self.viewController.webView.hidden = YES;

    NSString *splashImage;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
        splashImage = @"Default-Portrait~ipad.png";
    
    else 
        splashImage = @"Default~iphone.png";
    

    UIImageView *splash = [[UIImageView alloc]initWithFrame:[self.window frame]];
    [splash setImage:[UIImage imageNamed:splashImage]];
    [self.window addSubview:splash];


【讨论】:

除非您的应用在后台运行,否则不会调用 will terminate 即使有权限弹出窗口也会触发此方法,因此需要进行一些额外检查...?【参考方案3】:
Please follow this  -
-(void)applicationWillResignActive:(UIApplication *)application

    imageView = [[UIImageView alloc]initWithFrame:[self.window frame]];
    [imageView setImage:[UIImage imageNamed:@"Portrait(768x1024).png"]];
    [self.window addSubview:imageView];


Here to remove your imageview:
- (void)applicationDidBecomeActive:(UIApplication *)application

    if(imageView != nil) 
        [imageView removeFromSuperview];
        imageView = nil;
    

It is working and tested many times.

【讨论】:

这会起作用,但在 iOS 7 中使用多任务列表时也会更改快照,不建议这样做。【参考方案4】:

斯威夫特 4.2

func applicationDidEnterBackground(_ application: UIApplication) 

        let imageView = UIImageView(frame: self.window!.bounds)
        imageView.tag = 25
        imageView.image = UIImage(named: <YOUR_SPLASH_SCREEN_IMG>)
        UIApplication.shared.keyWindow?.subviews.last?.addSubview(imageView)


func applicationWillEnterForeground(_ application: UIApplication) 

        if let imageView : UIImageView = UIApplication.shared.keyWindow?.subviews.last?.viewWithTag(25) as? UIImageView 
            imageView.removeFromSuperview()
        


【讨论】:

【参考方案5】:

对于我当前的项目,我想在应用程序被终止后强制重新启动。我将此添加到应用的 plist 中:

为确保启动画面正确无误,我使用了上述建议:

- (void)applicationWillResignActive:(UIApplication *)application 
[[UIApplication sharedApplication] ignoreSnapshotOnNextApplicationLaunch]; 

- (void)applicationDidEnterBackground:(UIApplication *)application 
[[UIApplication sharedApplication] ignoreSnapshotOnNextApplicationLaunch]; 

它运行良好。

【讨论】:

以上是关于杀死后 iOS 应用程序启动图像的主要内容,如果未能解决你的问题,请参考以下文章

即使在杀死并重新启动应用程序后,如何在本机 iOS 中下载音频文件?

iOS 更新后保留旧的启动屏幕和应用程序图标

在应用程序被杀死后在应用程序启动时恢复未完成的多部分/表单数据上传任务

如果它变得无响应,iOS 会杀死我的应用程序吗?

iOS 应用程序被杀死并重新启动显示我的最后一个 VC

如果应用程序被杀死/运行,ios显示/隐藏通知