iOSでホームボタンでの切替時にバックグラウンド実行中のアプリの実行画面をマスクしたいときがあります。例えば、TouchIDなどを対応するB2CアプリやB2B/B2E向けのアプリにおいて、バックグラウンドで実行中もセキュリティを担保したい場合を想定しています。
AppDelegate.swiftにて、該当するメソッド内に遷移を記述いたします。キーになるのは、applicationWillResignActive()とapplicationDidBecomeActive()のメソッドです。それぞれバックグラウンドに入るときと、フォアグラウンドに呼び戻されるときにコールされます:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var splashView: UIView? // 新規で追加するView
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
splashView = UIView(frame: (self.window?.bounds)!)
// スプラッシュの背景を黒色にしてみる。画像を入れ込みたい場合には、splashViewに対して、addSubviewでUIImageViewなどを追加すれば良い。
splashView?.backgroundColor = UIColor.blackColor()
return true
}
func applicationWillResignActive(application: UIApplication) {
// アクティブアプリから外れるときに現在のウインドウ表示項目として、splashViewを追加する。
self.window?.addSubview(splashView!)
}
func applicationDidEnterBackground(application: UIApplication) {
}
func applicationWillEnterForeground(application: UIApplication) {
}
func applicationDidBecomeActive(application: UIApplication) {
// 追加したsplashViewをsuperViewから削除する。
self.splashView?.removeFromSuperview()
}
func applicationWillTerminate(application: UIApplication) {
}
}
※applicationWillEnterForeground()でremoveFromSuperview()を行った場合、コントロールセンターで非アクティブになったときからのアプリ復帰などが対応できませんので、applicationDidBecomeActive()で行うようにしてください。
いかがでしたか。かなりシンプルですが、このプログラムを記述することで、バックグラウンド時にアプリの実行画面のマスクをすることができます。必要に応じて、Splash用のかっこいいロゴなどをUIViewに追加するとそれっぽくなります。