【问题标题】:Screenshot that taken by iOS when (before) application go into background?iOS 在(之前)应用程序进入后台时拍摄的屏幕截图?
【发布时间】:2013-08-09 19:45:09
【问题描述】:

希望大家都知道,iOS 在你的应用程序进入后台之前截图。

我从official document.得到它

在移至后台之前从视图中删除敏感信息:当应用过渡到后台时,系统会拍摄应用主窗口的快照,然后在将应用移回时简要显示到前台。在从您的 applicationDidEnterBackground: 方法返回之前,您应该隐藏或隐藏可能作为快照一部分捕获的密码和其他敏感个人信息。

所以,这里我们可以隐藏我们的“敏感个人信息”,系统会截取应用主窗口的快照,因此我们无法更改其功能。

但我想知道..

1) 如果在我的应用程序中我处于第 4 个视图,并且我的应用程序进入后台,那么系统会截取哪个视图/页面的屏幕截图?第一个(应用程序的启动视图?)或应用程序的第四个视图/页面?? (这对我来说有点混乱)。

2)我们可以在系统截屏时触发任何操作,或者有任何通知可以通知我们系统截屏吗??

3) 我只是想知道,是否可以在我的应用程序启动之前拍摄屏幕截图(以编程方式)?如果 YES 然后给我建议如何去做。如果,那么我可以在哪里/何时截屏(我的意思是在应用程序的哪个最小阶段我们可以截屏?) ?

【问题讨论】:

  • 一个操作系统截取的屏幕截图存储在设备上的哪个路径?

标签: ios iphone objective-c cocoa-touch


【解决方案1】:
  1. 它会占用一个屏幕,而不是最顶部的视图,实际上它是对显示您的应用程序的窗口进行屏幕截图。
  2. 不,没有通知屏幕快照将要拍摄或正在拍摄。您应该只在applicationDidEnterBackground; 方法中处理它。只是在文档中说明
  3. 不,这是不可能的,您想在应用程序运行之前如何执行任何代码?操作系统将制作屏幕截图,请确保将所有内容隐藏在applicationDidEnterBackground; 中。最低状态是您的应用已启动并正在运行。

我所做的是在我的应用程序中,一旦我的应用程序被推送到后台,就会在我的UIWindow 上放置一个额外的视图。因此,当制作屏幕截图时,会捕获此视图。

【讨论】:

  • 如果我在第四视图,然后我的应用程序进入后台,那么系统会截取第四视图的屏幕截图??
  • @第三个问题 - 我的意思是我们可以截取应用程序的哪个最小阶段/状态?
  • 是的,如果您的应用程序被推到后台并且您在第 4 个视图上,那么屏幕将由第 4 个视图组成。但是您将能够在顶部推送一个新视图,然后系统将拍摄该视图的屏幕截图。它只是您应用程序最后状态的屏幕截图。
  • 谢谢先生,只是有点困惑,我不确定,但 95% didFinishLaunchingWithOptions 首先调用方法,所以它是应用程序的开始状态?我们可以在这里截屏吗?但是在didFinishLaunchingWithOptions 方法之前是否可以截屏.. 抱歉这种愚蠢的问题,但我想提高我的知识,这对我的应用程序也很重要。可能你明白了,谢谢:)
  • 当我在第四个视图并且我按下主页按钮时是否有可能(所以基本上我的应用程序在后台) 以及我何时按下应用程序图标 (所以基本上我的应用程序将在前台) 当我的应用程序将在前台时,它将显示特定 viewController 的视图(可能是第一个或第二个?)而不是 viewController 的第四个视图?
【解决方案2】:

1) 只有一个屏幕。屏幕截图是从该屏幕截取的。在您的模型案例中,这应该是第四个视图控制器的视图。但是,您的第四个控制器的视图很可能没有覆盖所有屏幕或具有透明元素。在这种情况下,第三甚至第二和第一视图控制器的视图的一部分是屏幕的一部分。

这是一个屏幕截图,而不是视图控制器镜头或任何东西。

2) 你理解文档没问题。截图是你从applicationDidEnterBackground回来后截的。不会有进一步的文件。

3) 不,您不能在调用应用程序之前执行任何代码。但是,我感觉您正在寻找与您字面意思不同的东西。 由于某些其他原因,我在模拟器中执行了一个小程序,只实现了主函数,即使没有调用 UIApplicatoinMain。这是您的应用程序中的代码可能会被执行的第一个时间点,尽管这并不完全是“超出书本”的。如果我没记错的话,当时屏幕是空白/黑色的。因此,如果您要求创建其他应用程序的屏幕截图的方法,这不是前进的方式。

【讨论】:

  • 谢谢先生,只是有点混乱,我不确定,但 95% didFinishLaunchingWithOptions 首先调用方法,所以它是应用程序的开始状态?我们可以在这里截屏吗?但是在didFinishLaunchingWithOptions 方法之前是否可以截屏.. 抱歉这种愚蠢的问题,但我想提高我的知识,这对我的应用程序也很重要。可能你明白了,谢谢:)
  • 当我在第四个视图并且我按下主页按钮时是否有可能(所以基本上我的应用程序在后台) 以及我何时按下应用程序图标 (所以基本上我的应用程序将在前台) 当我的应用程序将在前台时,它将显示特定 viewController 的视图(可能是第一个或第二个?)而不是 viewController 的第四个视图?
  • 坦率地说我不知道​​,但只要控制器 #4 的视图仍然可见,这种情况就不应该发生。
【解决方案3】:

它不像用户按下按钮那样截取屏幕截图。

此功能与state restoration 相关。当应用程序进入后台时,它将每个屏幕的视图层次结构展平为用于任务管理器的屏幕截图。如果您选择恢复状态,它还将保留用户界面的状态。这意味着一个人可以将应用程序从后台状态恢复并可能以这种方式查看敏感信息,这可能是您需要处理的事情。

Tech QA 1838 中介绍了防止信息包含在状态屏幕截图中。

【讨论】:

    【解决方案4】:

    1) 我很确定系统会拍摄当前可见视图的快照,所以堆栈中的最后一个,而不是第一个

    2) 另外,可能会有一个通知让我们知道系统将截取屏幕截图(否则我们如何隐藏敏感信息?:)),但恐怕我们目前处于 NDA 之下我猜?

    3) “在我的应用程序启动前截屏”是什么意思?您的代码在您的应用程序启动时开始执行,所以这个问题几乎没有意义:-/ 但是,您可以在应用程序的任何位置拍摄屏幕快照,并且有很多关于此的 stackoverflow 帖子

    【讨论】:

    • @vik.. 在第三个答案中,我知道在应用程序之前无法截屏。启动,并且还知道我们可以在应用程序的任何位置拍摄屏幕快照。但我想知道我们可以截取应用程序的哪个最小阶段??
    • 为什么问题 2 与 NDA 有任何关系?
    • 我可能误解了第二个问题
    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多