2010-04-03 38 views
2

我读了许多关于如何检测震动的职位,但我不知道:如何在用户晃动iPhone时播放音频文件?

  1. 目前什么是检测抖动的最佳方式?

    • 和 -
  2. 当用户晃动iPhone如何播放音频文件ONLY

任何人都有一个建议,例子/教程或示例代码?

感谢

回答

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

适合实现暂停,暂停,播放,播放选择器。

0

这已在here之前得到解答。我使用的是该代码的修改版本,并且效果很好。请注意,在即将发布的OS版本中,您将能够通过标准API检测抖动手势。

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

感谢您的回答。这是另一个可以接受的解决方案(希望我可以标记两个) – wgpubs 2010-04-07 21:47:50