2

揺れを検出する方法に関するいくつかの投稿を読みましたが、よくわかりません。

  1. 揺れを検出するための現在の最良の方法は何ですか?

    • と -
  2. ユーザーがiPhoneを振っているときにのみオーディオファイルを再生するにはどうすればよいですか?

誰かアドバイス、例/チュートリアル、またはサンプルコードがありますか?

ありがとう

4

3 に答える 3

3

以下のようなものをコントローラー(または実際には任意のUIResponder ...)に実装できます。これらは3.0以降で使用できます。高度な作業をしたくない場合は、加速度計のレベルまで下げる必要はありません。これは、揺れからどれだけの詳細が必要かによって異なります。

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

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    if (motion==UIEventSubtypeMotionShake) {
        if ([self paused]) {
            [self play];
        }
    }
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    if (motion==UIEventSubtypeMotionShake) {
        if ([self playing]) {
            [self pause];
        }
    }
}

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    if (motion==UIEventSubtypeMotionShake) {
        if ([self playing]) {
            [self pause];
        }
    }
}
于 2010-04-03T09:02:14.373 に答える
2

UIAccelerometerを使用して、クラスにUIAccelerometerDelegateプロトコルを実装します。おそらくあなたはこのようなことをすることができます:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acc {
  float twoGs = 2.0;
  if ((acc.x * acc.x) + (acc.y * acc.y) + (acc.z * acc.z) > twoGs * twoGs) {
    if ([self paused]) {
      [self play];
    }
  } else {
    if ([self playing]) {
      [self pause];
    }
  }
}

一時停止、一時停止、再生、再生セレクターの適切な実装。

于 2010-04-03T07:07:11.613 に答える
0

これはここの前に答えられました。私はそこで提案されたコードの修正バージョンを使用しています、そしてそれは素晴らしい働きをします。OSの今後のバージョンでは、標準APIを介してシェイクジェスチャを検出できるようになることに注意してください。

于 2010-04-03T08:57:57.057 に答える