Goalist Developers Blog

バックグラウンド時に画面を隠す方法

こんちは。渡部です。

今回はアプリがバックグラウンドに行った時に表示されていた画面をマスクする方法です。
多分10分あればできちゃいます。

手順

・適当に画面を用意する
・コードを書く
・おしまい

適当に画面を用意する

まず適当なプロジェクトのViewControllerに 弊社サービスを牛耳る(二回目)ふろぐんのimageViewを貼り付けます。

f:id:watabe1028:20170831164204p:plain

普通にこのままバックグラウンドに行くとこうなります。

f:id:watabe1028:20170831164219p:plain

バックグラウンドに行ったことを検知するのはAppDelegateのお仕事です。

バックグラウンドに行った際にマスクするviewを表示し、 アクティブに復帰した際にマスクするviewを非表示にします。

コードを書く

バックグラウンドに行く際に呼ばれるのが
applicationWillResignActive

復帰する際に呼ばれるのが
applicationDidBecomeActive

これらに追加していきます。
AppDelegateにviewと処理を追加します。

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var backView: UIView? // マスクにするview

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        // viewを黒色に指定
        self.backView?.backgroundColor = UIColor.black
        
        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // アクティブじゃなくなる際にbackViewをaddする
        self.window?.addSubview(backView!)
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // 追加したbackViewをremoveする
        self.backView?.removeFromSuperview()
    }
}

すると、バックグラウンドに行く際にこうなります。

f:id:watabe1028:20170831164237p:plain

うぇい

おわりに

むかーしむかし、セキュリティが厳しい会社のアプリを作った時、
この機能をつけた記憶があります。
この機能でセキュリティが担保できるとは思いませんが、
視覚的には効果があるので(簡単ですし)やってみるのも良いかもしれません。