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

Posted

技术标签:

【中文标题】如何仅在用户摇动 iPhone 时播放音频文件?【英文标题】:How to play an audio file ONLY while user is shaking iPhone? 【发布时间】:2010-04-03 06:47:09 【问题描述】:

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

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

    和 -

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

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

谢谢

【问题讨论】:

【参考方案1】:

您可以在控制器(或实际上的任何 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];
        
    

【讨论】:

感谢您的回答。这是另一种可接受的解决方案(希望我能同时标记为正确)【参考方案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];
    
  

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

【讨论】:

【参考方案3】:

在here 之前已经回答了这个问题。我正在使用那里提出的代码的修改版本,效果很好。请注意,在即将发布的操作系统版本中,您将能够通过标准 API 检测摇晃手势。

【讨论】:

以上是关于如何仅在用户摇动 iPhone 时播放音频文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 播放随机音频文件

如何在 iPhone 扬声器上强制播放音频?

iPhone 的 webViewDidFinishLoad 是不是会检测到流式音频文件的“播放结束”

摇动时在背景中播放歌曲

在 HTML5 中使用音频标签时如何避免主播重新播放音乐?

如何在iphone中同时播放音频和视频