iOSアプリでバックグラウンドとフォアグラウンドの切り替えイベントの取得方法

こんにちは!ぐち(@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];
}

enterBackgroundenterForegroundはそれぞれ通知を受け取る側(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です。あとはセレクターとしてメソッドを実装すれば、それぞれのイベント時に呼ばれます。

では今回はこの辺で。