アプリの画面上で物事を移動/変更するために加速度計を使用しています。また、他のアニメーションについては、ViewControllerでUIEventSubtypeMotionShakeを検出する必要があります。
私のアプリはシンプルなビューベースのアプリであるため、UIAccelerometerDelegate AND FirstResponder(シェイクイベントを検出するため)として機能するビューコントローラーは1つだけです。最初のシェイクジェスチャが検出された後、[accelerometer didAccelerate]メソッドによる加速度計の入力は必要ないため、加速度計のデリゲートをnilに設定しました。
-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (motion == UIEventSubtypeMotionShake)
{
NSLog(@"shake");
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];
//my shake handling code
}
}
問題は、最初の揺れの動きが正しく検出されていないことです。UIEventSubtypeMotionShakeイベントをトリガーするには、2〜3回以上シェイクする必要がありますが、加速度計のデリゲートがnilになった後の後続のシェイクは、完全に検出されています。
UIEventSubtypeMotionShakeは、コードによってオーバーライドされている加速度計のdidAccelerateイベントに依存しているため、これが発生している必要があります。しかし、私は両方のイベントを使用する必要があります。
別の方法は、3.0より前に実行する必要があったのと同じように[加速度計didAccelerate]の揺れを処理/検出することです(この質問のいくつかの回答で述べたように)が、すぐに利用できるものをコーディングする必要があるのはなぜですか?
加速度計とUIEventSubtypeMotionShakeの両方を同時に使用するアプリやコードサンプルはありますか?