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

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

【问题讨论】:

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

标签: iphone objective-c ios7 xcode5


【解决方案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]; }
    

    它运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      相关资源
      最近更新 更多