杀死后 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 中下载音频文件?