Taptic Engine 初探

1,188 阅读2分钟
原文链接: codingtime.me

感谢组织过年借我只iPhone 7P,赶紧呈上一篇Taptic Engine报答组织

简述

Taptic Engine 是苹果的触觉反馈技术,其中Taptic演变自Haptic,即触觉。
Taptic Engine目前已经应用在苹果全线设备中。它让Apple Watch震动时有手腕被人拍了一下的感觉。让MacBook触摸板有以假乱真的触感(Force Touch)。而在iPhone上,除了实现了3D Touch让屏幕多了一维交互外,还实现了虚拟Home键的反馈效果,甚至还提供了一套Taptic API供开发者实现自己的震动反馈。

何时使用触摸反馈

为了保证所有app体验的一致性,苹果总结了适合触摸反馈的场景,收录于iOS Human Interface Guidelines中,规范中将触摸反馈的使用场景分为三类:Notification、Impact和Seleciton。

Notification用来表示成功、失败或者警告的反馈,Impact用于加强用户对物理碰撞体验,Selection用于表示用户选择区域的变化。
苹果在其官方文档里反复强调了在用户确定需要反馈的时候再使用,不要因为触摸反馈帅就乱用,再加上触摸反馈只支持iPhone 7/7P,因此在设计触摸反馈时一定要考虑使用场景,不能让有触摸反馈的用户觉得干扰,也不能影响没有触摸反馈用户的体验。 文档里啰啰嗦嗦了这么多苹果爸爸你倒是什么时候给电话接通加个震动提醒啊,这很符合Notification.Success的场景好吗

Taptic API

和iOS Human Interface Guidelines对应,Tapic API用三个子类 UIImpactFeedbackGeneratorUISelectionFeedbackGeneratorUINotificationFeedbackGenerator 来代表三种不同类型的震动。
无论是哪种震动,调用的套路基本相同:

  1. 实例化FeedbackGenerator
  2. 调用prepare方法。(非必须)手动调用prepare的好处是可以预先初始化FeedbackGenerator,这样在需要触发震动的时候可以立即响应。当然在实时性不是很强的操作上不调用prepare也没什么关系。
  3. 调用震动方法。不同类型的实例调用的方式不同,比如UIImpactFeedbackGenerator调用的是impactOccurred,而UISelectionFeedbackGenerator调用selectionChanged。
  4. 释放FeedbackGenerator。(非必须)即把FeedbackGenerator实例设为nil。

我写了个包括各种类型触摸反馈的demo,需要体验的可以戳这里。 (PS:亲测demo中的方法都不支持6s, 6s用户表示忧伤,明明我6s用户有Taptic硬件啊/(ㄒoㄒ)/~~)