iPhone/iPadスマートアプリ開発レシピ
iPhone/iPadスマートアプリ開発レシピ(1)

iOS端末ハードウェアの歴史と近接センサアプリ開発


クラスメソッド株式会社
開発部 姫野悟志
2012/3/8

近接センサアプリを作る準備

- PR -

 本稿のアプリ作成では、以下を利用しています。

  • 端末:iPhone 4
  • OS:iOS 5.0.1
  • IDE:Xcode 4.2.1(「Storyboard」を使用)

 また今回作成するアプリは、エミュレータでの動作確認ができないため、実機で試すには「iOS Developer Program」への登録(有料)が必要です。登録の仕方や実機テストの仕方は、少し古いですが以下の記事を参照してください。

ここが大変だよiPhone実機テスト+OS 3.0の新機能
ここが大変だよiPhone開発(4) 作成したアプリをiPhone/iPod touchの実機で動かす手順を説明し、iPhone OS 3.0で追加された気になる機能とサンプルも紹介します
Smart & Social」フォーラム 2009/10/27

 なお本稿では、「Storyboard」を利用したレイアウトなどは割愛し、センサを使う実装のみ説明します。

腕立て伏せアプリの実装

 まずは起動時の処理です。近接センサは、デフォルトではオフになっているため、起動時の処理は必要ありません。

画面を上下反対にする処理

 次に、画面を上下反対にする処理です。まず、Xcodeのナビゲータエリアでプロジェクト名を選択し、[Summary]で、以下の画像のように[UpsideDown]だけを選択した状態にします。

 プログラムの修正も必要です。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
     return (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}

 「shouldAutorotateToInterfaceOrientation:」メソッドは「Single View Application」テンプレート使用時に、すでに記述されています。このメソッドはデバイスの向きが変わった際に実行されるメソッドです。向きが変わった際に、その向きに合わせて回転させるかを「BOOL」で判断します。

 「shouldAutorotateToInterfaceOrientation:」メソッド内では、リターンする「BOOL」値が上下逆を表す「UIInterfaceOrientationPortraitUpsideDown」のときのみ「YES」にするという処理にします。

「Start」ボタンの処理

 次は、「Start」ボタンの処理です。

- (IBAction)start:(id)sender {
    // 近接センサオン
    [UIDevice currentDevice].proximityMonitoringEnabled = YES;
    
    // 近接センサ監視
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(proximitySensorStateDidChange:)
                                                 name:UIDeviceProximityStateDidChangeNotification
                                               object:nil];
}

 最初に、近接センサをオンにします。「UIDevice」クラスの「proximityMonitoringEnabled」プロパティを「YES」にすることでオンになります。

 次に、近接センサの監視です。「NSNotificationCenter」の「addObserver:selector:name:object:」メソッドの「name」に「UIDeviceProximityStateDidChangeNotification」を指定することで監視が行えます。

 引数の最後にnilを指定しています。この引数「object」は通知の送信元を指定するためのものですが、nilを指定することで送信元がどんなものでも通知されます。また「name」にも、nilを指定可能で、この場合も意味は同様です。

監視中に通知を受けると実行される処理

 次に、監視中に通知を受けると実行される処理の説明です。

- (void)proximitySensorStateDidChange:(NSNotification *)notification {
    // センサから離れた場合にカウントアップ
    if ([UIDevice currentDevice].proximityState == NO) {
        counter.text = [[NSNumber numberWithUnsignedInt:++intCount] stringValue];
    }
}

 監視中は、近接センサがオンでもオフでも切り替わるたびに通知され、オブザーバのメソッドが実行します。そのため、腕立て伏せ1回に付き2度オブザーバのメソッドを実行します。

 オブザーバのメソッド内で腕立て伏せのカウントを行うためオン、オフどちらかでカウントする必要があります。今回はオフの際にカウントを行います。

 「UIDevice」クラスの「proximityState」プロパティでセンサの状態が取得できるので、if文でオフの場合のみカウントアップします。

「Stop」ボタンの処理

 最後に、「Stop」ボタンの処理です。

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

 ここでは、近接センサをオフにします。「Start」ボタンの処理で「YES」にしていたものを「NO」にすることでオフになります。

 また、監視を解除しましょう。解除には、「NSNotificationCenter」の「removeObserver:name:object:」メソッドを利用します。監視をする際と同じように、「name」に「UIDeviceProximityStateDidChangeNotification」を指定して解除します。

 これで、近接センサを利用した腕立て伏せアプリができました。

勢いのある腕立てでiPhoneを壊さないように注意!

 近接センサは、センサを有効にして「NSNotificationCenter」で監視を行うだけで利用できるため、iPhoneのハードウェア機能の中でも比較的容易に、かつ少ないコード量で利用できる機能です。

 ただし、最初にお話しした通り、なかなか使いどころの難しい機能でもあります。

 本来、近接センサは画面をロックするために用意された機能のため、センサが反応すると、画面がブラックアウトします。今回は腕立て伏せの回数をカウントすることに利用しましたが、このブラックアウトへの切り替えは決してスムーズとは言えないため、素早く腕立て伏せすると反応しないなど、そのまま利用するには少し無理があるかもしれません。

 また、本アプリを作成して実際に試す際には、顔を勢いよく近づけ過ぎてiPhoneを壊さないように注意してください。

 次回は、加速度センサやマルチタッチ、カメラのいずれかを使うアプリの作り方を紹介しますので、お楽しみに!

■ @IT関連記事


iPhoneアプリ開発入門
盛り上がるiOS(iPhone・iPad・iPod touch)アプリ開発。そのハウツーや魅力に関する@IT記事一覧です

iOSでジオ(GEO)プログミラング入門
iPhone/iPad/iPod touchで動く位置情報アプリを作成するための「測位機能の取り扱い」「地図の取り扱い」「サーバとの通信」という重要なポイントを解説します
Smart & Social」フォーラム
iPhoneより多彩なAndroidのセンサをアプリで操作
Androidで動く携帯Javaアプリ作成入門(13) 
Androidで使えるさまざまなセンサを紹介し、加速度や磁気、方位、温度などの値を取得して使うアプリの作り方を解説します
Smart & Social」フォーラム 2010/1/15
開発者が知らないと損するAndroid 4.0の新機能44選
Androidで動く携帯Javaアプリ作成入門(26)
 AndroidビームやWi-Fiダイレクト、ライブエフェクト、顔認識、スクリーンリーダ、ソーシャル系などの新機能をテーマ別に紹介
Smart & Social」フォーラム 2011/11/2

1-2  

 INDEX
iPhone/iPadスマートアプリ開発レシピ(1) 
iOS端末ハードウェアの歴史と近接センサアプリ開発
  Page1
iOS端末ハードウェアの歴史まとめ
実は初代iPhoneからある!? 「近接センサ」とは
近接センサを使う「腕立て伏せアプリ」
Page2
近接センサアプリを作る準備
腕立て伏せアプリの実装
勢いのある腕立てでiPhoneを壊さないように注意!



 Smart&Social フォーラム トップページへ



Smart & Social フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Smart & Social 記事ランキング

本日 月間