iOS中震动反馈Haptic Feedback使用

前几天元旦的时候,用iMessage发“新年快乐”的时候,苹果给出了放烟花的彩蛋。

logo

这个倒是还不是很令人吃惊,真正令人吃惊的是手机的震动真的跟放烟花的节奏一模一样,苹果的震动处理真的是吓人。包括Macbook上的触摸板震动,以前我还真的以为是可以按下去的,直到有一天电脑死机了才知道是震动反馈。。

正好趁着这个机会把苹果从iOS9就开始使用的震动反馈拿出来看看。

其实在发布iOS9中的 force touch就是用了这个,只不过当时苹果并没有开放api给开发者使用。

这不,iOS 10发布之后,苹果果然就把这个接口开放了出来。

UIFeedbackGenerator

UIFeedbackGenerator是整个震动反馈的核心,它只有一个方法

1
- (void)prepare;

他的作用就是让响应立刻发生,如果不调用这个方法的话,可能会发生延时,而且多次调用这个方法也没问题,他是安全的。

UINotificationFeedbackGenerator

UINotificationFeedbackGenerator才是真正需要我们写的东西,其实他里边的东西也不多,只有三个属性

  • UINotificationFeedbackTypeSuccess
  • UINotificationFeedbackTypeWarning
  • UINotificationFeedbackTypeError

分别在成功、警告和错误时调用。

具体的调用方法就是这样:

1
2
3
4
5
+ (void)executeSuccessFeedback
{
UINotificationFeedbackGenerator *generator = [[UINotificationFeedbackGenerator alloc] init];
[generator notificationOccurred:UINotificationFeedbackTypeSuccess];
}

UIImpactFeedbackGenerator

UIImpactFeedbackGenerator是另外一个类型的震动,同样也拥有三种形式

  • UIImpactFeedbackStyleLight
  • UIImpactFeedbackStyleMedium
  • UIImpactFeedbackStyleHeavy

分别是轻度、中度和重度。

调用的方法也很简单:

1
2
3
4
5
6
+ (void)excuteLightFeedback
{
UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle: UIImpactFeedbackStyleLight];
[generator prepare];
[generator impactOccurred];
}

UISelectionFeedbackGenerator

UISelectionFeedbackGenerator中只有一个类型,是用来模拟选择滚轮一类控件时的震动,比如计时器中的picker滚动时就有这个效果。

1
2
3
4
5
+ (void)excuteSelectionFeedback
{
UISelectionFeedbackGenerator *generator = [[UISelectionFeedbackGenerator alloc] init];
[generator selectionChanged];
}

Demo

最后放Demo,下载下来用真机跑一下按按就知道什么感觉啦。

logo