Think Big Act Local

iPhone開発を軸にブレブレの記事を書いていきます。

近接センサを使った踏み絵アプリの作り方

iPhoneの上部には近接センサというものがついています。デフォルトの電話アプリで、通話中に端末に耳を近づけると画面が消えるのはこのセンサの働きです。
今回はこの近接センサを使って「踏み絵アプリ」を作ってみます。

アプリの概要

  • 歴史の教科書にも出てくる踏み絵iPhone
  • 画面に絵が表示され、それを踏むと成功、踏めなければ失敗
  • 近接センサを使って成功/失敗の判定をする

画面

作った画面はこんな感じ。単純にUILabelとUIImageViewを貼っつけただけです。例として隠れApple信者をあぶり出す踏み絵にしてみました。

f:id:himaratsu:20130513013741p:plain

ソースコード

まずはviewDidAppearあたりで近接センサをONにします。

// 近接センサをONに
- (void)startSensor {
    // 近接センサをオン
    [UIDevice currentDevice].proximityMonitoringEnabled = YES;
    
    // 近接センサ監視
    [[NSNotificationCenter defaultCenter] addObserver:self
      selector:@selector(proximitySensorStateDidchange:)
          name:UIDeviceProximityStateDidChangeNotification
         object:nil];
}

この状態で近接センサの値が変わると、以下のメソッドが呼ばれます。

// 近接センサの値が変更
- (void)proximitySensorStateDidchange:(NSNotification *)notification {
    // センサに近づいたら踏み絵成功
    if ([UIDevice currentDevice].proximityState == YES) {
        // アラート出す
        NSString *message = @"あなたは隠れapple信者ではありません";
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"踏み絵成功"
                                                        message:message
                                                       delegate:self
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"OK", nil];
        [alert show];
    }
}

これだけの記述でカンタンに使うことができます。

後処理も忘れずに行いましょう。
viewDidDisappearあたりで以下を呼べばOKです。

- (void)stopSensor {
    // 近接センサオフ
    [UIDevice currentDevice].proximityMonitoringEnabled = NO;
    
    // 近接センサ監視解除
    [[NSNotificationCenter defaultCenter] removeObserver:self
           name:UIDeviceProximityStateDidChangeNotification
          object:nil];
}

以上の実装で、足を近づけるとアラートが表示される踏み絵アプリを作ることができました。非常に簡単ですね!

参考リンク

おわりに

近接センサをアプリで制御できると知ってやってみましたが結構簡単ですね。
しかし通話アプリの省エネ目的の他に何か使い道はあるのでしょうか。

関連書籍

iOSで使える便利なOSSの解説本。
有名なものからあまり知られてないものまで網羅的に紹介されています。