2012-09-27 50 views
1

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

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

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

与上面的代码麻烦的是,当应用程序返回到前台,认为走了,因为它已经成为隐藏的,我不能用一个简单的

取消隐藏
[ UIApplication sharedApplication ].keyWindow.hidden = NO; 

in applicationWillEnterForeground方法的应用程序委托。有没有人知道一种方法来恢复隐藏的视图,一旦我将它隐藏在后台方法中?现在这是一个黑屏,因为视图已被隐藏。当你隐藏一个密钥窗口,然后回到背景之前会发生什么。那是你在不再是关键窗口之前隐藏的关键窗口?任何人都可以指出我正确的方向吗?

谢谢

+0

你在说什么“屏幕截图”?你的意思是一个窗口在重新打开时被恢复的方式?你想看到什么样的行为? – rdelmar

+0

我基本上希望在应用程序返回时清除所有内容的空白屏幕,以显示瞬间显示的内容(iOS采用后台激活时的快照)。默认情况下,此快照是应用进入后台之前的最后一个屏幕。我希望这个最后一个屏幕在苹果可以拍摄快照之前没有任何内容 –

回答

2

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

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

self.window.hidden = NO; 

而不是[UIApplication sharedApplication.keyWindow.hidden = NO;来解决问题。假设像大多数模板一样,你的应用程序委托有一个窗口引用。

另一种替代方法是给我打电话[self.window makeKeyAndVisible];

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

希望这会有所帮助!

+0

你在哪里准确地调用它? –

+0

我试图把这个应用程序委托的applicationWillEnterForeground方法,我没有看到应用程序被发送到后台相同的视图。它返回另一个视图。在我的情况下,当我在登录页面上按homebutton时,它会在用户按下登录并成功登录后返回视图:s –

+0

我把它放在'applicationWillEnterForeground:'和'applicationDidBecomeActive:' - 你设置'hidden如果我没有弄错的话,那么我的财产就可以了你创建一个新窗口吗?使用根视图控制器做什么?它对我来说工作得很好,但当然这只是一个只有一个绿色屏幕的单一视图。 –