iPhone 上的一次轻点如何变成 Mac 上的一次点击
发送一次点击很容易。在糟糕的连接上按顺序发送成千上万次,还不让光标滞后,才是远程控制有意思的地方。
位置是比例,而不是像素
当你触摸画面时,手机发送的不是“像素 812, 640”,而是相对于所显示来源、每个轴上介于 0 和 1 之间的一个点。 Mac 再把它转换成它正在捕获的显示器或窗口上的真实坐标。这就是为什么无论画面是适配屏幕还是放大、 是竖屏还是横屏、是在 Retina 屏幕上还是在形状与手机相同的虚拟显示器上,点击都能落在正确的位置。 双方都不需要就分辨率达成一致。
并非每条消息都一样
输入以小型 JSON 命令的形式在加密的控制连接上传送,应用对每种类型的处理方式都不同:
- 鼠标移动只保留最新的。如果网络卡顿时排了三次移动,前两次就毫无价值。最新的一次会取代它们,并且移动被限制在每秒约 60 次。
- 滚动会累加。排在一起的两个滚动事件会合并为一个事件,数值为两者之和,所以不会丢失任何距离。
- 点击和按键绝不丢弃,也不重排序。鼠标抬起先于鼠标按下到达,会是一个你看得见的错误。
这条小小的策略,就是光标平滑滑动与卡顿后猛然一跳之间的大部分差别。它也意味着,糟糕的连接只会让指针变得不那么流畅, 而绝不会变成一次错误的操作。
按键就是 macOS 键码
一次按键就是一个 macOS 虚拟键码,加上表示 Shift、Control、Option 和 Command 的修饰位。 Mac 应用把它转换成真实的键盘事件并发给系统,这就是它需要“辅助功能”权限的原因。 快捷键会跟随你所在的应用:上面的面板显示的是当前前台编辑器的命令,而不是固定的列表。
让按键表现得像实体键盘,有一些出人意料的细节。真正的方向键带有两个额外的标志, 一个功能键标志和一个数字小键盘标志,而简单合成的事件会漏掉它们。没有它们,即使正确的键码已经送达, Control 加上方向键在 Mac 上也毫无反应,而不是打开 Mission Control。 Peering 现在会像真正的键盘一样设置这两个标志。
文本不是按键
表情符号、带重音的字母和非拉丁文字无法对应到键码。对于这些,手机会把字符本身作为文本发送,由 Mac 把它们输入进去。 这就是键盘能在任何语言下工作的原因,也是在这种模式下少数 Mac 快捷键不起作用的原因。 这是一个取舍,应用允许你在“设置”中切换。
保持同步
手机每秒向 Mac 发一次 ping,Mac 通过回显这个 ping 来应答,这同时也是一个实时的延迟读数。 如果手机转入后台,它会先说明这一点,因为 iOS 可能在不关闭连接的情况下冻结一个应用, 此时 Mac 会停止向它发送视频,直到它回来。会话也可以设为仅观看,这时画面继续传送,而 Mac 会忽略输入。
这个回路的另一半是画面如何传到手机。 两者合在一起,决定了整体用起来有多灵敏。
常见问题
Peering 支持表情符号和非英语键盘吗?
支持。不属于按键的文本会以字符的形式发送并在 Mac 上输入,所以表情符号和任何语言都可以使用。Mac 快捷键只会在发送键码的模式下发送。
为什么在较弱的连接上光标仍然平滑?
鼠标移动会被合并,只保留最新的位置,滚动会被累加。点击和按键则始终按顺序送达。