2012-09-27 49 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如果我沒有弄錯的話,那麼我的財產就可以了你創建一個新窗口嗎?使用根視圖控制器做什麼?它對我來說工作得很好,但當然這只是一個只有一個綠色屏幕的單一視圖。 –