本博客已停止维护,仅供浏览存档内容。了解详情 »

3D Touch 屏幕电子秤的实现

自从 iPhone 6s 发布以来,不少开发者都在研究用 3D Touch 屏幕检测物体重量的可行性。虽然从理论上来说硬件是完全支持的,但是 Apple 却一直不在软件方面提供支持。两个月前国外有人利用私有 API 强行实现了它,可却被 App Store 拒绝上架,大家只能无奈地看看演示视频来感受这个神奇的功能。

iPhone 6s + 铁勺子 = 电子秤?虽然听起来不可思议,可就在今天上午,我无意间发现了用 Javascript 检测 3D Touch 屏幕压力的方法,并且在浏览器里直接实现了电子秤功能!不需要上架审核,也不用下载任何应用,只要有一把普通的金属勺子,在 iPhone 6s 上用自带的 Safari 浏览器打开这个页面(或扫描这个二维码)就能开始玩啦!

https://www.dandyweng.com/playground/3d-touch-scale/

使用方法

第一步:先将手机放在平坦的表面上,再把金属勺子轻轻地放在屏幕的感应区上;
第二步:记下勺子的重量,拿开勺子,拉动屏幕上方的“皮重调节”滑块至抵消勺子的自身重量的位置;
第三步:再把勺子轻轻放回感应区,此时重量应显示为 0,如有误差则重复第二步;
第四步:拿起勺子,把要称重的物体放在勺子上,再一起轻放在感应区上即可。

setup-1
setup-2
setup-3
setup-4

准确度测试

现在电子秤的功能已经实现了,但准确度如何?只有测试一下才知道。于是我在家里翻箱倒柜,先找到这个尘封已久的小电子秤,用我桌子上的几个常见物品来做个对比试验:

comparison-test-1

五毛硬币,电子秤和 iPhone 均为 4g(官方数据为 3.8g)

comparison-test-2

火柴盒,电子秤和 iPhone 均为 9g

comparison-test-3

Apple TV 4 遥控器,45g

comparison-test-4

一小包红豆,36g

comparison-test-5

一小罐番茄酱,77g

comparison-test-6

Apple Watch Sport 38mm + 原装表带,48g

结论:iPhone 6s 的准确度与精确度都非常不错,竟然与专用电子秤一克不差。不过根据勺子的摆放方式,有时会出现 ±2g 左右的浮动,可以把勺子拿起来再重新放下去,多调整几次之后才能得到更准确些的数字,所以并没有多少实用价值。另外,理论重量检测上限为 385g,不要放太重的东西,如果你不听话把屏幕压裂了可别怪我!

开发过程及实现原理

前面提到过用 Javascript 检测屏幕压力,听起来似乎很神奇,实现起来却非常简单。今天在看国外一些著名开发者博客的时候,忽然发现 JS 的触摸事件出现了一个 force 属性,可以按百分比返回 3D Touch 的触摸力度(理论上亦适用于 Force Touch 触控板)。查了资料后得知 iPhone 6s 的 3D Touch 压力上限是 385g,那么只要经过简单的换算就能得出结果。再顺手写个简单的界面,还不到一小时就做好了。现在正考虑要不要再做一个自动去除勺子重量的功能。

那为什么要用金属勺子呢?根据 Apple 官方的演示视频可知 3D Touch 是通过感应屏幕表层在压力下的形变而实现的,可仅有压力是不够的,iPhone 的电容式触摸屏需要人体电场才能有作用,所以需要金属物体来把手指上的生物电导到屏幕上。那什么东西又是金属的,又好放东西,而且随手就能找到?好像只有勺子了,如果你有更好的想法,欢迎评论提出。

扫描二维码可分享到微信
或点击此处分享到新浪微博