2011-06-04 42 views
11

問題是這樣的 - 我的應用程序可以讓你的密碼保護自己。我使用的接口就像保護手機的密碼一樣。這一直運行良好,直到多任務出現。從多任務回來時防止您的應用程序的快照視圖

密碼保護仍然有效,但有一個問題。蘋果公司做了一些特殊的事情,讓它看起來像我們的應用程序在從後臺返回時加載速度更快。 OS在用戶離開應用程序之前拍攝了我們的屏幕圖片,並在應用程序的其餘部分仍在載入時顯示。

導致的問題是有人試圖去我的應用程序會看到密碼保護啓動前的屏幕圖像。當然,它並不多,但我不認爲我的用戶會喜歡人們甚至可以看到他們的數據。

如何停止顯示快照圖像?

+0

它不是一個好主意,把你的研究作爲SO – Robin 2011-06-04 06:22:47

+0

一個問題,我發現這個有趣的,但它是真實的,這是不正確的地方爲了它。只有明確可能回答標記正確的問題應該發佈。這根本不是問題。 – 2011-06-04 06:43:05

+0

請用自己的回答將它變成一個實際的問題,否則儘管你的意圖很好,你的帖子可能會被標記爲刪除。 – BoltClock 2011-06-04 06:47:50

回答

15

我解決了這個問題。這裏是解決方案:

- (void)applicationDidEnterBackground:(UIApplication *)application{ 
    if (appHasPasscodeOn){ 
     UIImageView *splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, 320, 480)]; 
     splashView.image = [UIImage imageNamed:@"Default.png"]; 
     [window addSubview:splashView]; 
     [splashView release]; 
    } 
} 

爲Default.png是我的應用程序的一個空白的屏幕截圖(對我來說這只是一個空白列表視圖)。在應用程序進入後臺之前,上面的代碼將我的真實觀點放在前面。所以,當你回到你看到的應用程序。瞧。

+2

我相信蘋果的文檔說應該在applicationDidEnterBackground中做到這一點。 applicationWillResignActive:在很多其他時間也會被調用,在此期間這可能不合適。 (在系統警報,調用多任務UI時等) – 2011-06-16 21:31:34

+0

好點Jesse。我編輯了代碼以指示將其置入的正確方法。 – Harris 2011-06-18 03:13:24

4

標記的答案完美適用於我,除了當應用程序再次變爲活動狀態時,splashView保持在屏幕上。我只是把它作爲一個屬性,並將[splashView removeFromSuperview]添加到我的applicationWillEnterForeground中來修復它。以防其他人得到類似的行爲。

0

這裏是雨燕3.0以上的解決方案:

lazy var splashView: UIImageView = { 
    let splashView = UIImageView(frame: UIScreen.main.bounds) 
    splashView.image = UIImage(named: "splash-view") 

    return splashView 
}() 

func applicationDidEnterBackground(_ application: UIApplication) { 
    guard let window = self.window else { fatalError("Window not found") } 
    window.addSubview(self.splashView) 
} 

func applicationWillEnterForeground(_ application: UIApplication) { 
    self.splashView.removeFromSuperview() 
} 
相關問題