隐藏KeyWindow会导致拍摄空白屏幕截图

时间:2012-09-27 16:32:09

标签: objective-c ios xcode ios5 ios4

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

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

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

上面代码的问题在于当应用程序返回到前台时,视图已经消失,因为它已经隐藏了,我无法用一个简单的取消隐藏它

[ UIApplication sharedApplication ].keyWindow.hidden = NO;

在app delegate的applicationWillEnterForeground方法中。一旦我将隐藏的视图隐藏在后台方法中,是否有人知道重新获得隐藏视图的方法?现在它是一个黑屏,因为视图已被隐藏。当你在去往背景然后回来之前隐藏一个键窗口时会发生什么。是不是关键窗口之前隐藏的关键窗口?有人能指出我正确的方向吗?

由于

1 个答案:

答案 0 :(得分:2)

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

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

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

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

另一个对我有用的选择是致电[self.window makeKeyAndVisible];

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

希望这有帮助!