web-dev-qa-db-ja.com

シンプルなiPhoneモーション検出

ジャイロスコープ/加速度計が一定量作動したことを検出する必要があります。基本的に、デバイスの動きがあるときを検出します。 CoreMotionについては何も知りません。

たぶん誰かが私をスターターチュートリアルか何かに導くことができます。

前もって感謝します。

22
Linuxmint

CoreMotionを使用する必要があると思います。良いニュースは、問題のあるドメインに使用するのはそれほど難しくないということです。 イベント処理ガイド 特に「処理されたデバイスの処理-モーションデータ」のセクションを読み始めてください。 わずかな動きがあったことを知りたいだけの場合は、前述のように、CMDeviceMotion.userAccelerationで回転処理と狭信号処理を省略できます。これは、回転するたびに加速度計の信号も発生するためです。

startDeviceMotionUpdatesToQueue:withHandler: の説明に従って、 CMDeviceMotionHandler を作成します。CMDeviceMotionHandlerは次のようにする必要があります。

float accelerationThreshold = 0.2; // or whatever is appropriate - play around with different values
CMAcceleration userAcceleration = deviceMotion.userAcceleration;
if (fabs(userAcceleration.x) > accelerationThreshold) 
    || fabs(userAcceleration.y) > accelerationThreshold
    || fabs(userAcceleration.z) > accelerationThreshold) {
    // enter code here
}

基本的にはそれだけです。すべての加速には対応するものがあることに注意してください。つまり、力を加えてデバイスを右に動かす(つまり加速する)と、減速の相手が動きを止め、デバイスを新しい位置に置くことができます。したがって、if条件はすべてのモーションに対して2回真になります。

35
Kay

viewDidAppearで、ファーストレスポンダーになります。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}

そして、あなたがファーストレスポンダーになることができることを確認してください:

- (BOOL)canBecomeFirstResponder {
    return YES;
}

次に、モーション検出を実装できます。

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (event.subtype == UIEventTypeMotion){
        //there was motion
    }
}
2
sudo rm -rf