2

アプリの画面上で物事を移動/変更するために加速度計を使用しています。また、他のアニメーションについては、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の両方を同時に使用するアプリやコードサンプルはありますか?

4

0 に答える 0