写文章也像做一款产品一样,随着技术的进步、识的迭代要进行合理的优化与更新。去的 2 年里,移动设备的更新迭代让振动反馈有更的想象空间,因此文在旧版文章的基础上做以下修订。
- 增加了 iPhone 新 API 内容;
- 结合最近的工内容总结,将旧版中一笔带的落地现模块展开详细阐述;
- 将振动反馈的用途以加合理的方式行分类阐述。希望能够帮设师朋友完振动设计的思考、设计、落地的流程。
旧版文章:
用一篇超全面的干货,帮你掌握产品的「触觉设计」
阅读文章
“她滑滑的,明亮着,像涂了‘明油’一般,有鸡蛋清那样软,那样嫩”,这是朱自清的散《绿》中对梅雨潭的一描写。“滑”、“软”、“嫩”是对触觉赋予意蕴的独特表达,这些我们一旦听到就会在脑海里浮现画面的描述是来自于生中无数次触觉带给我们的独特体验。
在体五感觉,触觉与其他感觉相比与我们身体接触更广,体全身上下都是触觉信号接收。尽管如此,类触觉能够传递信息是有限,常有视觉信息 1 %。不过,触觉类带来情感体验又是不可或缺,如没有它存在,我们在日常生活与现实物体互动过程将变索然味。技品也是如此,论是 VR 体感游戏是日常使用手,过动带来触觉反馈起到了画龙睛作用。
软件体验升级需要依赖硬件不断迭代。iPhone 动体验被用户赞叹不已,这自于与苹用户体验极致追求,即使在大多数用户看来关痛痒动功能,苹也进不断升级迭代,提高动模块性能,带来更舒适体验。
在 iPhone 振动模块的升级程,苹果不断增大振动模块积,从转子马达到马达的更新换代让震感越来越细腻,下图所示。
△ 上图内硬件图来自乎用户「云子信」
直到后,iPhone 7 / 7 plus 全新线性马达 Tapitic Engine 问世,iOS 10 的振动接口向发者,如此高配置的线性马达提供的细腻反馈不但使 iOS 系统具科技与的融合之,且赋能了第三方应用使用振动反馈提高产品体验。
可能有些读者会疑惑,全新的 Tapitic Engine 振动模式和以往有什不同之呢?先回忆一下在以往各种机的振动给带来的体验,基本都是嘈杂的声音加上酸麻的,体验非常拙劣,而 Tapitic Engine 实现了在不发出声音的情况下提供更细腻舒适的振动体验,如下图。
另外振动给另一个负面响就是其干扰性,大多数其机提供的振动并没有进行间和度的,这带来的问题是无论在何种景下,机都会给同的振动反馈,没有进行任何景的细。比如对于危险操作可能需要长久度大的反馈,而一些轻量化的提示只需要轻的振动即可,但是由于硬件的限制,大部安卓机都是一视同仁,而拥有 Tapitic Engine 的 iPhone 则可以定义多种不同的度,还可以穿插度使用模拟更多景,后文会详细介绍相关应用。
刚才提,绝大多数的安卓机型不可以对振动的度进行定义,因此不管在系统软件还是第三方软件中,如果景需要振动辅助,基本都是振动麻的一声“嗡”就不了了之了。只有少数有极神的安卓厂商会在振动体验上不遗余力,向苹果齐,但由于大部第三方应用开发者难以针对各个安卓机型不同的硬件振动模块进行适配,所以大部安卓机型上的第三方 App 如果需要振动都是调用一度,仍然未对振动度做景细,体验依然不尽人。
尽管触觉传递的息远远少于视觉和听觉,但通常也不会将触觉作为传递息的主要段,只将其作为视觉反馈和听觉反馈的一种补充和配。备的振动模块产生的触觉反馈,可以有效提高交互的易知性,并赋予产品生命力,增用户的情化体验。一来说,息传达和模拟现实是它主要的用途,下来将一一介绍。
1. 信息传达
振动反馈所能够提供的息是非常少量的,但是在一些殊景中,它存在着不可或缺的作用。在息传达的用途中,振动反馈通常有种功能:提示操作的结果是否发生;隐喻操作结果的性质。
提示操作的结果是否发生
在一些殊的景中,通过视觉和听觉产生的息可能不足够或者无法及传递给使用者,此就需要通过振动反馈来传递息,告知操作者操作的结果是否发生。
例如在车载软件的设计中,需要考虑到:1.操作者无法将视觉注意集中于界面上;2.道路环境中存在各种嘈杂的噪音干扰。基于上两点,驾驶者无法及时通过获取视觉和听觉信息了解操作的结果是否发生,如按钮是否被触发。此时通过振产生的触觉信息就可弥补视觉和听觉信息的足。
当然,振反馈的接受者一定是操作者,如手机来电和微信消息的振反馈可在静音或过于嘈杂的环境中保证接收者够获取来电示。
再比如 iPhone 从底部上滑后不松开手指定时后调出后台 App 进程,界左边会出现后台 App 移入视觉反馈,时会生动反馈告知用户进程页已经触发,可以在此时松开手指了。
再比如很多品下刷新都从前文提示改为了动提示。用户下距离到临界值并触发动后,用户感受到动后松手刷新了,而不用再使用“继续下刷新、释放刷新”等冗余文案来提示用户,如下图下房应用。
隐喻操作结果的性质
在一次振反馈中,振幅和频率同的变会建立同的物隐喻,从而给操作者同的感受。如 iOS 中置一个默认的 API 预设了 成功、失败、警告 种振反馈,分别对应结果的性质。
成功:Success。幅从低到高,传递积极信号,隐喻本操作结为成功。案例:脸识成功。
警告:Warning。幅从高到底,传递消极信号,隐喻本操作有风险,需要确认。案例:摇动以撤销。
失败:Error。幅先变高再变低,隐喻本操作结为失败。案例:脸识失败。
由于在 iOS 这个 API 广泛应用已经让用户将操作结性质与动类型立了联系,此很多 iOS 端游戏会接调用这个 API 去表现操作结性质。以我近期在玩儿《遇》为例,成功触发查看关卡按钮后会有「成功:Success」动反馈,
翅膀能量耗尽后继续击飞按钮会有「失败:Error」 动反馈。
2. 模拟现实
人们容易对自己熟悉的事物产生好感。在产设计中,我们经使现实生中见的视觉形象和声音进行隐喻联,与户建立情感连接。触觉例外,日生中各种各样的现实物体都会给我们带来同的触觉感受。电器按钮的阻尼感、节日烟爆炸传递的震感、拨齿轮带来的摩擦感等等都是我们与现实世界之间的触觉交互。振反馈可充分地模拟并给我们带来逼真的触觉体验。
在微信聊天页,双击头像触发功能后,伴随着头像左右抖动会生相应动,视觉和触觉配合让个交互流程更加生动。
为了研究不品上动带来反馈感受,我体验了很多品,论将动反馈运用到极致,不不提 QQ 戳戳功能,它动时节、强度与帧动画效是匹配,其设计团队匠心独具可见斑。为了观地让大家感受动变化,以戳戳「放大招」为例制作了效图大家展示大概动强度随时变化过程。下图,动画过程可以拆解为大招能量收、大招发射、大招撞墙、屏幕摇晃,分应不动强度,使体验极为真实和令惊喜。
我们使用 iMessage 发送短信时,如选择了烟花特效,在短信发出瞬,全屏幕会布满骤然绽放烟花。更令惊喜是,线性在此时进大大小小动模拟出烟花爆裂感,仿佛烟花是在我们手里绽放般。
不仅仅是上述案例,过动带来触觉反馈在应用设计层我们带来了巨大想象空。枪击,抛硬币,鼓,齿轮,等等等等,再加上视觉和听觉配合,更是带了用户身临其境体验。
看完了上文介绍动反馈应用,大家定觉十分有趣,是于我们设计师来说,如何设计和落地才是最要。那么接下来让我们看看我们有哪些已知工具可以帮助我们吧!
iOS 提供许拥有特定默认值的振动反馈 API,每个 API 之间的区别在振幅、频率或间隔时间,每个 API 中又有不同的类型,每个类型在振幅、频率或间隔时间上又有着微妙的差别,我们以通用合适的 API 选择恰当的类型从而满不同的场需要。在 2019 年 6 月的苹果开者大上,iOS 新推出新的 API:Core Haptics,它支持开者自己定义振幅和频率,从而为用户带来更加样化的触验。(文将以默认值 API 和自定义 API 区分两者。)
因此考虑某功能的交互添加哪种类型的振动反馈时,我们可以选用默认 API 或自义 API。下面将介绍这两类 API 并展示如何设落。
1. 默认值 API
默认值 API 穷举
默认值 API 为我们提供许不需要我们自己去整振幅和频率的振动选项。随着系统的更新,iOS 提供的默认值 API 一直在增加,但是每个 API 的适机型、适系统不是完一样的。我们要根据覆盖的系统和机型的需求选用最合适的一款 API,根据场去选用 API 中合适的类型。下面我将穷举出 iOS 现有的所有提供默认值振动的 API。果仅仅是将 API 展示出来,并不能帮助大家感受其中不同振动类型的具感,因此我也将该 API 的特定振动等级在哪个主流 App 中的哪个功能中应用也罗列出来,果大家想要感受某个 API 中某个类型的振动等级,打开相应的 App 验一下即。选择合适的 API 和类型将相应的 API 名称和类型的代号告诉开就以现无缝落地,也不出现让开加个振动,结果开做出的效果和我们设计师自己想要的完不一样的情况。
- Vibration 长动
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
简介:历史最悠久 API,高频率持续 1s 动,常用于消息知;
适:部苹果手机机型和部系统版;
案例:微信新消息通知。
- 3D touch(TapticEngine)
Peek 触感:AudioServicesPlaySystemSound(1519);
Pop 触感:AudioServicesPlaySystemSound(1520);
三次连续短振(三次 Peek 触感连续振动):AudioServicesPlaySystemSound(1521);
特点:常用于 3D touch 中,Pop 的震感略强于 Peek;
适配:只支持 iPhone 6s 及以上机型,如果机型不支持将不振动;
案例:长按或重按控制中心的某个控制项目;微信的情景菜单放大为页面;暂无案例。
- UIImpactFeedbackGenerator
微弱短振-Light(表示小的界面元素的物理碰撞或互动时)
UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle: UIImpactFeedbackStyleLight]; [generator prepare]; [generator impactOccurred];
中等短振-Medium(表示中等大的界面素的物理碰撞或互动)
UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle: UIImpactFeedbackStyleMedium]; [generator prepare]; [generator impactOccurred];
明显短-Heavy(表示较大界元素物理碰撞或互动时)
UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle: UIImpactFeedbackStyleHeavy]; [generator prepare]; [generator impactOccurred];
特点:常用于下拉刷新手势反馈;
适配:只支持 iPhone 7 及以上机型且系统需 iOS 10 及以上,如果机型或系统不支持将不振动;
案例:使 iOS 的时钟调节时间刻、iOS 开控件的开启和闭;支付宝我的应编辑页中长按某个应;支付宝首页长按功区触发二级操作。Heavy 与 3D touch 振感中的 Peek 极为接,使 Peek 的案例换 Heavy 是可行的;
- UINotificationFeedbackGenerator
成功-Success(表示一个任务或行为的完成)
UINotificationFeedbackGenerator *notificationFeedbackGenerator = [[UINotificationFeedbackGenerator alloc] init]; [notificationFeedbackGenerator notificationOccurred:UINotificationFeedbackTypeSuccess];
警告-Warning(表示进行一个任或行为产生了警告)
UINotificationFeedbackGenerator *notificationFeedbackGenerator = [[UINotificationFeedbackGenerator alloc] init]; [notificationFeedbackGenerator notificationOccurred:UINotificationFeedbackTypeWarning];
失败:Error(表示个任务或为失败)
UINotificationFeedbackGenerator *notificationFeedbackGenerator = [[UINotificationFeedbackGenerator alloc] init]; [notificationFeedbackGenerator notificationOccurred:UINotificationFeedbackTypeError];
特点:此 API 的三类型都连续振动多次,常应用于功、警告、失败的场景;
适配:只支持 iPhone 7 或更新款机型且系统需 iOS 10 或以上,如果机型或系统不支持将不振动;
案例:人脸识别成功;摇撤销;人脸识别失败、锁屏后输入密码错误。
- UISelectionFeedbackGenerator
UISelectionFeedbackGenerator *selectionFeedbackGenerator = [[UISelectionFeedbackGenerator alloc] init]; [selectionFeedbackGenerator selectionChanged];
特点:常应用于选择的场景;
适配:只支持 iPhone 7 及以上机型且系统需 iOS 10 或以上,如果机型不支持将不振动;
案例:Chrome 浏览器拉后左右滑择项、iOS 照片 App 或微信里看图片放大到极限值继续放大后弹时;
掉连续振的类,全 API 中单次振的振感从小到大的序为:
- UISelectionFeedbackGenerator(弱)
- UIImpactFeedbackGenerator-light(适中)
- UIImpactFeedbackGenerator-medium(适)
- UIImpactFeedbackGenerator-heavy(强烈)
- 3D touch-peek(强烈)
- 3D touch-poop(烈)
- Vibration(嘈杂)
大家在使用并不要被它各的点局限,别是当使用这些默认值振动模拟现实,通过开脑洞巧妙地组使用会产生想不的效果,比如刚才在用途部提的 QQ 戳一戳的计就非常别出心裁。
落地案例
- 案例 1:登录页提示勾选协议
我们体验完所有默认动 API 后,我们于动反馈等级选择会开始有定判断力。比如如要配合网易云音乐登录页中没有勾协议就点击登录后的这个醒画,我们择哪个 API 最合适呢?
了解了上述 API 并体验相的振后,大可直观发现「UINotificationFeedbackTypeError」最适合这个操作失败的场景。大告知开发使的 API 为 UINotificationFeedback,类为 Error,开发就可精确地调,效落地了。
- 案例 2:功能引导
案例 1 中只调用了某 API 中单一的类型,但时我们达到某些效果需将这些不同的 API 类型组合一复杂的振动反馈,此时我们就需详细标注了,我们需标注出调用的 API 以及类型、每振动之间的间隔时间。下面以之过的一引导动画例向家展示落过程。
项目背景:鲸云音效新增了闪光振动功能,用户开启后在听歌机闪光灯和振动马达会跟随节奏闪烁和振动。为了在入吸引用户进入置页面体验新功能,需要计一个引导方式吸引用户点击入。
设计表现:配合闪光振的功属性,为入口处的鲸音效的图标设计跳舞的画,并为图标的每个节拍匹配一个振反馈,增趣味性、真实感和感官上的丰富。画的效果如图示。
振标注:标注需要我们确定两个参数,分别是「振的 API 与类」和「每次振的间隔时间」。面的[ ]的容是代码层面实现组合复杂振的逻辑。
[播放 UIImpactFeedbackGenerator-light, 等待 0.45s, 播放 UIImpactFeedbackGenerator-light, 等待 0.39, 播放 UIImpactFeedbackGenerator-light, 等待 0.35, 播放 UIImpactFeedbackGenerator-light, 等待 0.7, 播放 UISelectionFeedbackGenerator, 等待上个播完, 播放 UIImpactFeedbackGenerator-light, 等待上个播完, 播放 UISelectionFeedbackGenerator, 等待上个播完, 播放 UIImpactFeedbackGenerator-light, 等待上个播完, ......]
我们以代码现的逻辑进行标注,以给到开工程师下图的标注形式。(仅供参考,设计前与开工程师沟通确定标注内容)
需要注意的是:每两个振动之间必须加间隔时间,否则两个振动就同时振动;间隔时间包括前一个振动运行的时间。
此时的小伙伴可能会疑惑:设好的振动需如何预览呢?如果到发同事出之后再体验好不好的话,那样万一修改的话,本岂不很高?
确实如此,当制作复杂的振动反馈组,计凭空想象是难把控不同度当振动组后形成的结果的,如果没有一个可以实编辑和预览的工,使用默认值 API 去计复杂的的振动是难直观得去反复调出最佳效果的。还好这个问题是有解决方案的,Github 上有一位博主通过将 iOS 振动默认值整成了一个 demo App,名字叫 Piano,在 Github 上的地址是 https://github.com/saoudrizwan/Piano ,demo 的安装过程比较复杂,安装包、安装和使用教程大家可以在文章结尾按指引领取。安装完成后,大家就可以直观地置振动等和间隔间,并且可以实预览震了。
当确定了震的计后,在实现阶段有种方式,第一是仍然使用之前文中提的标注方式来标注,然后让开发按照标注编写代码。第二种是直用上述的 Piano App 导出代码给开发同学使用,但是缺点是开发同学需要花点间引入第三方框架,会让应用安装包体积大概增加 50k。种方式大家选择。
2. 自定义 API
上述的默认值调用方式可以让不必过多思考就可以选择出适的振动等,但是对于一些定义程度要求高的模拟需求就远远不够了。这需要使用 iOS13 提供的新 API -Core Haptics。Core Haptics 支持将音频文件转为振动,而且计可以通过第三方软件可视化绘制「振幅」和「频率」的值,导出 haptic 格式文件后直交给开发工程使用。
想要绘制体验优质的自定义振,我们首先需要了解「振幅」和「频率」这两个物量与声音有么样的系。
物体动生声波,声波到我们耳朵鼓膜后被我们感受到,变成了可识声音。物体动范围和强度越大,幅越大,它将影响音量大小。秒动数越多,频率越高,它影响着音调高低,常能听到频率 20-20000hz 声音。
我们把一段声波输一个正弦波到示波器,振幅越大,波和波谷偏离零位的距离越远。频率越高,波动越密集。
在绘自定义的振动反馈时,我们也是主要编辑两个参数来达到相应的效果。使用软件 Lofelt Studio 将我们绘的振动导出为文件给到开直接用。
比如我如果设一款驾驶摩托车的游戏,场景摩托车从近处启动后驶向远方,需设相应的振动配合画面音效。相应的数变化振幅不断降低,频率不断提高,从模拟出真实世界的效果。 Lofelt Studio 中绘制出的效果如下。
具体的软件使用方法就不此赘述了,学习趣的小伙伴可以点击文章结尾处按照指引领取安装包使用教程。
虽然这个定义 API 已经发布许久,但是应用它的 iOS 端 App 或游戏还是比较少的,当考虑在 App 或游戏中应用,除了根据现实模拟之外,还可以参考一些非 iOS 端优秀的游戏产品是如何计的,如 NS、PlayStation 等。比如以最近在玩儿的 NS 上的《马奥赛车 8》举例,它在柄的振动反馈上下足了心思,加速、撞击、获得道等行为都能够触发不同的振动反馈,每个反馈都是根据现实进行映射。下面以加速带助力和起步二者为例,简介绍下其波形征以及在 Lofelt Studio 中的绘制效果。
除了游戏领域,这自义 API 音视频类产品的应用也非常广泛。试一下,如果我们欣赏一首歌曲的过程中,不但可以通过听觉感受它的旋律,还能通过触觉感受模拟声源的振动,那么这给我们的多感官丰富体验一妙不可言。
QQ 音挑选了节奏比较的十首歌曲置为色歌,再针对这十首歌曲针对性地计振动,体验非常细腻。别是《发如雪》开头的雨点落地面的振动模拟,极为细腻和逼真。
爱奇艺的蹦迪模式,会适配一些以音为主题的综艺,比如《中国新说唱》《队的夏》,在歌演唱会触发振动反馈。
以下 8 条原则以 iOS 人机交互规范基础,结合我的实践验总结。
1. 建立清晰的因果关系
振动反馈需与用户的特操作建立清晰的因果关系。如果操作与振动反馈之间的延迟过,就会让用户觉得非常莫其妙。
2. 目的谨慎使用
虽然振动反馈对于体验的提升较的价,但我们还应谨慎使用,从确保它能够我们的产品提供持续性的价。我们可以使用它去产品增加很多独出裁的设去吸引用户,也可以仅仅添加少去强化一些具结果性的交互,但将它应用到太多琐碎且不重的交互就可能得其反,给用户造不必的负担。
3. 保持一致性
确保振动反馈的一致性体验。某特的振动反馈会让用户将它与特的操作绪关联起。比如,如果我们使用一常用于任务功的较面积极的振动反馈去表达任务失败,用户就会非常疑惑不知所措。
4. 可选择性
使振动反馈设可选项。允许用户关闭振动反馈,确保它时产品仍然能够常使用。
5. 考虑普性
确保我们的产品充分测试振动反馈。不同的人不同的偏好对振动不同的耐受度,所以我们需去寻找尽可能多的人行测试。
6. 考虑对硬件的影响
确保振动不会扰到其他操作。比如陀螺仪、摄、麦克风可能会受到振动的影响不能常作。
7. 可作其他反馈的补充
振动反馈也可以作其他反馈的补充。尤其游戏设中,当视觉、听觉、触觉的反馈相辅相,高还原度去模拟实世界时,用户将会获得连贯自然的体验。
8. 性化场景考虑行制化
游戏中,考虑使用制的振动反馈去强化用户的体验(使用文提到的自义 API 实)。除了系统提供的那些自振动反馈的控件外,我们应该游戏设一些独的、特色的振动反馈。比如,振动可以加强体撞击时的真实感,还可以暗示用户通过视觉不易察觉的内,比如敌人逐渐逼近的脚。
一交互流程中,如何判断否加入振动反馈,我们可借鉴以下几点。
1. 明确用户需求
首先明确用户的需求,道用户在某次任务中需要达到什么目的。
2. 梳理互流程
将用户的某次任务流程分为单个操,当用户进行一系列操将完成任务。
3. 明确传达信息
明确每一步操中能够帮助用户尽快完成当前步骤的重要信息。比用户需要获得什么样的反馈信息才能开始下一步?
4. 选择传达形式
选择合适的信息传达形式,比是视、听或者是触。不同的传达形式适合的场不同,传递的信息密度也不同。
5. 落地设计结果
确定传达形式,确设计结果的用,避免给用户造成不必要的干扰。
以每 App 都的下拉刷新的功能例,使用述骤行设。
- 用户在使用下拉刷新时,主要的需求是获取新的内容。
- 下拉刷新的交互过程中,用户的操作骤:下拉页面;松手指获得新内。
- 那在这个交互流程中,有哪些反馈息能够帮助用户尽快完成当前步骤呢?从①步骤过渡②步骤需要给予用户的反馈息是「下拉页面的距离是否已经足触发刷新的需要」。
- 这条反馈信息首先我们够想到通过视觉、听觉或触觉进行传达,但是听觉适应的场景具有限性,因此我们暂考虑。我们优先择视觉反馈,如通过字「拉刷」到「松手刷」的变示户拉页面的距离已经满足触发刷的需要,但是户在拉刷的操作通是非专注性的,视觉反馈有时会被户忽略,此时我们可增触觉反馈,作为视觉反馈的补充或直接替代掉它。
- 最后确保触觉反馈强度能够被用户获取不会打扰到用户。
产品每一次的硬件迭代总是会给计带来巨大的想象空间,作为计,需要在术日新月异的代不断开拓视野,拓展计的边界。同也是由于术的进步,可能本文的术实现方案在未来的某个间就被淘汰和抛弃,所以希望大家对本文持批判性度,对文章内可能的疏漏予以指出,将及更新或更正。
参考资料:
- 《微互》 者: 塞弗 (Dan Saffer)
- 《iOS 中关于 Taptic-Engine 震动反馈的深入解析》 作者:深蓝_S: https://www.jianshu.com/p/d4567dbd7dde
- 《如何评价 iPhone 上的振动反馈?》中「云可」的回答,作者:云可: https://www.zhihu.com/question/264649851
- iOS Human Interface Guidelines: https://developer.Apple.com/design/human-interface-guidelines/ios/user-interaction/haptics/
- Piano demo on Github: https://github.com/saoudrizwan/Piano
注作者微信公众号:「设成于思」