UIImpactFeedbackGenerator不工作

时间:2016-11-25 09:19:24

标签: ios objective-c uikit

我正在尝试将新的UIImpactFeedbackGenerator用于触觉反馈,但它无效。

  • 在iPhone 7上测试
  • iOS 10.1.1
  • 启用系统触觉设置

我在Objective-C

中使用以下代码示例
UIImpactFeedbackGenerator *myGen = [[UIImpactFeedbackGenerator alloc] init];
[myGen initWithStyle:(UIImpactFeedbackStyleMedium)];
[myGen impactOccurred];
myGen = NULL;

我在UILongPressGestureRecognizer委托中触发它。

知道问题可能是什么?

3 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,来自文档:

  

...请注意,调用这些方法不会直接播放触觉。   相反,它会通知系统事件。然后系统   决定是否根据设备播放触觉,   应用程序的状态,剩余的电池电量等   因素。例如,目前仅播放触觉反馈:

     
      
  • 在具有支持的Taptic Engine(iPhone 7和iPhone 7 Plus)的设备上。
  •   
  • 当应用程序在前台运行时。当系统
  •   
  • 已启用触觉设置。
  •   

我猜你只需要相信系统就知道什么时候应该开火...... 出于显而易见的原因,我不喜欢这种方法 - 所以使用了AudioServicesPlaySystemSound and k​System​Sound​ID_Vibrate

  

...在某些iOS设备上,您可以传递k System Sound ID_Vibrate   不断调用振动。在其他iOS设备上,调用此方法   具有该常数的函数什么都不做。

<强>目标C

import AudioToolbox
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

Swift 3

import AudioToolbox
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))

答案 1 :(得分:1)

我在2017年WWDC上问了一位Apple工程师,为什么我的触觉请求有时会失败,他让我在下一个运行循环中调用impactOccurred,如下所示:

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

像魅力一样工作!

答案 2 :(得分:1)

我遇到了同样的问题,事实证明,在使用实时摄像头输入时,UIImpactFeedbackGenerator不会提供任何触觉反馈