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

如何仅在用户摇晃iPhone时播放音频文件?,iphone,objective-c,audio,shake,Iphone,Objective C,Audio,Shake,我读过很多关于如何检测震动的帖子,但我不确定: 目前检测震动的最佳方法是什么 及- 如何仅在用户摇晃iPhone时播放音频文件 有人有建议、示例/教程或示例代码吗 谢谢在课堂上使用并实施协议。也许你可以这样做: - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acc { float twoGs = 2.0; if ((acc.x * acc.x) + (acc.y

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

目前检测震动的最佳方法是什么

及- 如何仅在用户摇晃iPhone时播放音频文件

有人有建议、示例/教程或示例代码吗

谢谢

在课堂上使用并实施协议。也许你可以这样做:

- (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];
    }
  }
}

有关暂停、暂停、播放、播放选择器的适当实现,请参见。

这已在前面回答过。我使用的是这里提出的代码的修改版本,效果非常好。请注意,在即将推出的操作系统版本中,您将能够通过标准API检测震动手势。

您可以在控制器或任何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];
        }
    }
}

谢谢你的回答。这是另一个可以接受的解决方案,希望我能将两者都标记为正确