2010-04-03 37 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