【问题标题】:Hiding the KeyWindow to cause a blank screenshot to be taken隐藏 KeyWindow 以导致截取空白屏幕截图
【发布时间】:2012-09-27 16:32:09
【问题描述】:

我试图阻止 Apple 实现在应用程序暂停到后台时截取当前屏幕内容的屏幕截图。我发现了一段可以工作的代码,但它有一个问题。它的作用是清除屏幕上的键窗口,因此当拍摄快照时,它是一个空白屏幕。这是该功能的代码 sn-p:

- (void)applicationWillResignActive:(UIApplication *)application
{
    [ UIApplication sharedApplication ].keyWindow.hidden = YES;
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [ UIApplication sharedApplication ].keyWindow.hidden = YES;
}

上述代码的问题在于,当应用返回前台时,视图消失了,因为它已被隐藏,我无法通过简单的方式取消隐藏它

[ UIApplication sharedApplication ].keyWindow.hidden = NO;

在应用委托的 applicationWillEnterForeground 方法中。一旦我将隐藏视图隐藏在后台方法中,有谁知道如何恢复隐藏视图?现在它是一个黑屏,因为视图已被隐藏。当您在进入后台然后返回之前隐藏一个键窗口时究竟会发生什么。你之前隐藏的那个keywindow不再是keywindow了吗?谁能指出我正确的方向?

谢谢

【问题讨论】:

  • 你在说什么“屏幕截图”?你的意思是窗口重新打开时恢复的方式?你想看到什么行为?
  • 我本质上想要一个清除所有内容的空白屏幕,以便在应用返回时显示片刻(iOS 在后台激活时拍摄的快照)。默认情况下,此快照是应用程序进入后台之前的最后一个屏幕。我希望最后一个屏幕在苹果可以拍摄快照之前没有所有内容

标签: objective-c ios xcode ios5 ios4


【解决方案1】:

刚刚制作了一个演示项目,并且能够重现您的问题。实际上,当调用applicationWillEnterForeground: 时,应用程序的keyWindow 属性是nil

很多时候,您的应用程序的委托将引用其窗口 - 这通常是许多应用程序的 Xcode 默认模板。我能够通过调用

解决问题
self.window.hidden = NO;

而不是[UIApplication sharedApplication.keyWindow.hidden = NO;。假设与大多数模板一样,您的应用程序委托具有窗口引用。

对我有用的另一种方法是致电[self.window makeKeyAndVisible];

所有这些都是在 iOS 6 模拟器上完成的。

希望这会有所帮助!

【讨论】:

  • 你到底在哪里称呼这个?
  • 我试图把它放在应用程序委托的 applicationWillEnterForeground 方法中,但我没有看到与应用程序发送到后台时相同的视图。它返回另一个视图。就我而言,当我在登录页面上按下主页按钮时,它会在用户按下登录并成功登录后返回视图:s
  • 我把它放在applicationWillEnterForeground:applicationDidBecomeActive: - 如果我没记错的话,你之前设置了hidden 属性。你创建一个新窗口吗?用根视图控制器做什么?它对我来说完全没问题,但当然这是一个只有绿屏的单一视图。
  • 我实际上可能在某个地方这样做。有没有办法让关键窗口与进入后台之前的最后一个活动窗口完全相同。
  • 如果您在应用程序委托中保留对该窗口的引用,那么它将类似于[self.otherWindow makeKeyAndVisible]self.otherWindow.hidden = NO
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
相关资源
最近更新 更多