Apple – Support – Discussions – Determining a Shake with the …

iPhone/iPod touch を振ったときの動作を検知する方法です。
setUpdateInterval でチェック間隔を指定して、accelerometer メソッドの violence で感度を指定します。設定を色々変えて実際に iPhone/iPod touch を振ってみてアプリに合った設定を探す感じですね。

- (void)viewDidLoad {
    [super viewDidLoad];
    [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0/15)];
    [[UIAccelerometer sharedAccelerometer] setDelegate:self];
}

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
	const float violence = 1.5;
	static BOOL beenhere;
	BOOL shake = FALSE;

	if (beenhere) return;
	beenhere = TRUE;
	if (acceleration.x > violence || acceleration.x < -1*violence)
		shake = TRUE;
	if (acceleration.y > violence || acceleration.y < -1*violence)
		shake = TRUE;
	if (acceleration.z > violence || acceleration.z < -1*violence)
		shake = TRUE;
	if (shake) {
		// 振ったときの処理
	}
	beenhere = FALSE;
}

追記:2008.12.24
(UIAcceleration *) acceleration のプロパティの x, y ,z はそれぞれ下記方向を指します。
x>0 : 本体を右へ
x<0 : 本体を左へ
y>0 : 本体を上へ
y<0 : 本体を下へ
z>0 : 本体を全面へ
z<0 : 本体を背面へ

関連する投稿