iPhoneの加速度センサの使い方です。
○使い方
1.
delegateとするクラスに
<UIAccelerometerDelegate>プロトコルを使います。
2.
加速度センサを有効にしたいタイミングで
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0 / 60.0];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
と記述。
この場合、60分の1秒ごとに加速度を検出し、selfにメッセージが送信されることになります。
3.
以下の関数を実装。
-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration*)acceleration
60分の1秒ごとに呼ばれます。
UIAccelerationクラスのaccelerationのメンバx,y,zに加速度の方向が入っています(後述)。
4.
終了時には、delegate指定を削除すればOKです。
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];
○加速度の向きについて
加速度の方向とは、通常は重力の方向が検知されます。iPhoneを思いっきり振るなどした場合は、振った方向の逆向きに加速度が働いたように検知されます。
iPhoneの座標系は、画面左から右を+x方向、ホームボタンから電源ボタンの方向を+y、画面の表方向を+zとした向きに軸が指定されています。
例えば、iPhoneを縦に持っていれば、加速度(重力)の方向は(0,-1,0)、
iPhoneを右に倒した状態で持っていれば(0,1,0)、
iPhoneを水平に持っていれば(0,0,-1)
となります。
この値が、(void) accelerometer: didAccelerate: メソッドの引数accelerationのx,y,zに格納されている訳です。
また、iPhoneを縦に持った状態で思いっきり上に振り上げれば、加速度は(0,-2,0)のような値になります。iPhoneから見たら、突然重力が大きくなったように感じる訳です。
逆に思いっきり下に振り下ろせば、加速度は(0,1,0)のような値になります。
iPhoneをビルの屋上から落としている間は、加速度はほぼゼロになるはずです。
○クラス詳細
[UIAccelerometer Class]
sharedAccelerometer
+ (UIAccelerometer *)sharedAccelerometer
クラスインスタンスを返す。シングルトン。
updateInterval
@property(nonatomic) NSTimeInterval updateInterval
更新時間。setUpdateIntervalで指定した値
delegate
@property(nonatomic, assign) id
delegate
setDelegateで指定したデリゲート
[UIAccelerometerDelegate Protocol]
accelerometer:didAccelerate:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
setUpdateIntevalで指定した時間ごとに、加速度データをdelegateに送信する
[UIAcceleration Class]
x
@property(nonatomic, readonly) UIAccelerationValue x
加速度のiPhone左右方向成分
y
@property(nonatomic, readonly) UIAccelerationValue y
加速度のiPhone上下方向成分
z
@property(nonatomic, readonly) UIAccelerationValue z
加速度のiPhone前後方向成分
timestamp
@property(nonatomic, readonly) NSTimeInterval timestamp
加速度イベントが発生した時刻(CPU時間)
[その他]
typedef double UIAccelerationValue;
PR