2016-11-25 283 views
2

我試圖使用新的UIImpactFeedbackGenerator作爲觸覺反饋,但它不起作用。UIImpactFeedbackGenerator不起作用

    在iPhone上測試
  • 的iOS 9.1.1
  • 系統觸覺設置啓用

我使用的Objective-C

UIImpactFeedbackGenerator *myGen = [[UIImpactFeedbackGenerator alloc] init]; 
[myGen initWithStyle:(UIImpactFeedbackStyleMedium)]; 
[myGen impactOccurred]; 
myGen = NULL; 

下面的代碼示例我在UILongPressGestureRecognizer代表中觸發它。

任何想法可能是什麼問題?

+0

建議在調用'impactOccurred'前調用'prepare',你試過了嗎? – donnywals

+0

@ donnywals是的,我也試過,沒有幫助:/ – pqvst

回答

1

我遇到了同樣的問題,從文檔:

...請注意,調用這些方法並不直接播放觸覺。相反,它通知系統該事件。然後系統 根據設備,應用程序的狀態,剩餘電池電量以及其他因素來確定是否播放觸覺。例如,僅當前播放觸覺反饋:

  • 在具有受支持的Taptic引擎(iPhone 7和iPhone 7 Plus)的設備上。
  • 當應用程序在前臺運行時。當系統
  • 觸覺設置啓用。

我猜你只需要在系統信任知道何時應該火... 我不喜歡這種方法進行 - 所以使用AudioServicesPlaySystemSound and k​System​Sound​ID_Vibrate原因很明顯:

.. 。在某些iOS設備上,您可以傳遞k個System Sound ID_Vibrate 常量以調用振動。在其他iOS設備上,使用該常量調用此函數 什麼也不做。

Objective-C的

import AudioToolbox 
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate); 

斯威夫特3

import AudioToolbox 
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate)) 
1

我問在WWDC 2017年蘋果工程師爲什麼我的觸覺請求有時會失敗,並且他有我電話impactOccurred下一次運行循環如下:

[self.feedbackGenerator performSelector:@selector(impactOccurred) withObject:nil afterDelay:0.0f]; 

工作就像一個魅力!