こんにちは!ぐち(@bloguchi)です。
スマホアプリの開発って画面のライフサイクルと呼ばれる、見えたり見えなくなったりの動きに合わせてきちんと実装しないといけないんです。そこで、今回はiOSのバックグラウンド(アプリが見えていない状態)とフォアグラウンド(アプリが見えている状態)の切り替えイベントを取得して処理を行う方法をご紹介します。
iOSからのイベント通知
UIApplicationDelegate
を継承したAppDelegate
クラス内に下記のようにメソッドを実装することによって、iOSからのイベントをハンドリングすることができます。
// バックグランドになったときに呼ばれる - (void)applicationDidEnterBackground:(UIApplication *)application { } // 2回目以降にフォアグラウンドになったときに呼ばれる - (void)applicationWillEnterForeground:(UIApplication *)application { }
通知する
上記のメソッドでiOSからの通知を受け取ったら、ViewController
に通知を出すためにNSNotification
を用いて通知を行います。
// バックグランドになったときに呼ばれる - (void)applicationDidEnterBackground:(UIApplication *)application { NSNotification* n = [NSNotification notificationWithName:@"enterBackground" object:self]; [[NSNotificationCenter defaultCenter] postNotification:n]; } // 2回目以降にフォアグラウンドになったときに呼ばれる - (void)applicationWillEnterForeground:(UIApplication *)application { NSNotification* n = [NSNotification notificationWithName:@"enterForeground" object:self]; [[NSNotificationCenter defaultCenter] postNotification:n]; }
enterBackground
とenterForeground
はそれぞれ通知を受け取る側(ViewController
)で指定するので定数として宣言してもOKです。
通知を受け取る
続いて、AppDelegate
から投げられた通知を受け取るために、ViewController
に実装を行います。
- (void)viewDidLoad { [super viewDidLoad]; NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; [nc addObserver:self selector:@selector(EnterBackground) name:@"enterBackground" object:nil]; [nc addObserver:self selector:@selector(EnterForeground) name:@"enterForeground" object:nil]; } // アプリがバックグランドになったときに呼ばれる - (void)EnterBackground { } // アプリが2回目以降にフォアグラウンドになったときに呼ばれる - (void)EnterForeground { }
NSNotificationCenter
の生成はviewDidLoad
内でやっておけばOKです。あとはセレクターとしてメソッドを実装すれば、それぞれのイベント時に呼ばれます。
では今回はこの辺で。