【发布时间】:2014-04-20 19:09:13
【问题描述】:
当用户按下主页按钮时,应用究竟会发生什么? iOS 是否会对当前应用的状态进行快照?
如果我是对的,如何“插入”另一个快照?在用户按下主页按钮两次后,我需要它来显示主 iOS 屏幕。
【问题讨论】:
标签: ios cocoa-touch snapshot
当用户按下主页按钮时,应用究竟会发生什么? iOS 是否会对当前应用的状态进行快照?
如果我是对的,如何“插入”另一个快照?在用户按下主页按钮两次后,我需要它来显示主 iOS 屏幕。
【问题讨论】:
标签: ios cocoa-touch snapshot
为了实现这一点,您可以在- (void)applicationDidEnterBackground:(UIApplication *)application 的窗口中添加一个子视图(即带有主屏幕图像的 ImageView)。
回来时(在- (void)applicationWillEnterForeground:(UIApplication *)application)你必须删除子视图。
不过,Apple 建议始终显示应用的最新状态(最佳用户体验)。
AppDelegate 实现示例:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
/* other code */
self.overlayView = [[UIImageView alloc] initWithFrame:self.window.bounds];
self.overlayView.image = [UIImage imageNamed:@"mainscreen_screenshot.png"];
/* other code */
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[self.window addSubview:self.overlayView];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[self.overlayView removeFromSuperview];
}
【讨论】:
iOS 在您的应用程序进入后台之前截取屏幕截图。
我从Apple's official documentation.得到它
在移至后台之前从视图中删除敏感信息:当应用过渡到后台时,系统会拍摄应用主窗口的快照,然后在将应用移回时简要显示到前台。在从您的 applicationDidEnterBackground: 方法返回之前,您应该隐藏或隐藏可能作为快照一部分捕获的密码和其他敏感个人信息。
所以,在这里我们可以隐藏我们的“敏感个人信息”,系统会拍摄应用程序主窗口的快照,我们无法更改其功能。
#敏感的个人信息
在应用进入后台之前设置一个模糊的屏幕覆盖,一旦应用变为活动状态,请移除此覆盖(查看 @cweinberger 的答案)。 p>
如果是iOS 7或更高版本可以使用函数ignoreSnapshotOnNextApplicationLaunch
此外,allowScreenShot 标志可以在Restrictions Payload 中探索。
【讨论】:
ignoreSnapshotOnNextApplicationLaunch 方法:)