如何在用户摇晃iPhone时播放音频文件?

时间:2010-04-03 06:47:10

标签: iphone objective-c audio shake

我已经阅读了很多关于如何检测震动的帖子,但我不确定:

  1. 目前检测奶昔的最佳方法是什么?

    • 和 -
  2. 如何在用户摇动iPhone时播放音频文件

  3. 任何人都有建议,示例/教程或示例代码?

    谢谢

3 个答案:

答案 0 :(得分: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];
        }
    }
}

答案 1 :(得分: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];
    }
  }
}

适用于暂停,暂停,播放,播放选择器的实现。

答案 2 :(得分:0)

这已在here之前得到解答。我正在使用那里提出的代码的修改版本,它工作得很好。请注意,在即将推出的操作系统版本中,您将能够通过标准API检测摇动手势。