来吧兄弟,一起玩一起讨论!
您需要 登录 才可以下载或查看,没有账号?注册
×
iOS 系统在输入延迟最小化方面可谓得心应手,但是不管你的应用有多快,延迟在某种程度上还是有。
iOS 系统在输入延迟最小化方面可谓得心应手,但是不管你的应用有多快,延迟在某种程度上还是有。这其中的一部分原因是与电容式触摸传感器扫描输入的频率相关,而这个频率通常与屏幕刷新的频率相同,每一次扫描间隔的时间大约是 16.7 毫秒。像 iPad Air 2 和即将上市的 iPad Pro,它们扫描指纹的频率是 120Hz,时间间隔也随之减少到 8.3 毫秒。在软件方面有 iOS 触摸和图形流线图的步骤和程序,苹果在 iOS 9 中就进行了改善,减少触摸延迟。
上图是 iOS 触摸和图形流线图的可视化表示形式。你可以看到,通常情况下一般应用都会有4个帧的延迟。在苹果公司对延迟的定义中,屏幕帧也包括在内,因此我们就按他们的定义标准来进行讨论吧。
在这种理论情况下,只有当应用的更新状态恰好是一帧才会出现这种情况。那么你可能认为,如果应用更新状态的时间减少,支持 Core Animation 开始将应用视图转化成 GPU 指令,以便经过 GPU 完成渲染,这样输入延迟就会减少,其实并非如此。过去iOS都不是这样。不管应用优化得再怎么好,Core Animation 只会在下一屏幕帧开始的时候开始进行转化。这时因为一款应用在一帧中可以多次更新状态,而这些更新则是成批处理,只在屏幕上渲染一次。
在 iOS 9 中,苹果撤销了对 Core Animation 在下一帧开始的时候开始工作的要求。因此经过优化的应用将能够对更新状态产生更多影响,让 Core Animation 发出 GPU 指令,在一个屏幕帧的时间跨度中画下一帧。这样触摸延迟就从此前的四帧减少为三帧,而一些视图比较复杂,对 Core Animation 和 GPU 渲染的要求多于一帧的应用来说,其触摸延迟就从五帧减少为四帧。
苹果还对触摸输入水平进行完善。如上所述,iPad Air 2 和 iPad Pro 扫描指纹的频率是 120Hz,它能够通过让应用在一帧的中间开始进行工作,从而将延迟减少了半帧。除了减少延迟,开发者还可以利用额外的触摸输入信息来提高应用响应用户输入的准确度。
比如绘画应用现在可以更准确地沿着用户手指滑过的地方将线条勾勒出来。苹果将这些额外的触摸称为合并触摸,开发者需要在应用中增加代码方能支持。但是在输入频率为 120Hz 的设备上应用更新将会自动在每一帧的中间开始。
iOS 9 最后一个用于减少输入延迟的方法就是预测触摸。开发者可以利用信息来预测用户的手指将如何在设备上移动,利用这些信息他们可以提前更新视图,一旦接收到关于用户手指移动的准确信息之后,撤销掉预测的变化,将真实变化体现出来,并根据用户新的移动信息来继续做出预测。
未来预测触摸将能够再将输入延迟减小一帧,加上在输入流水线中减少的一帧,未来大部分设备上的输入延迟就能够低至 2 帧,而像 iPad Air 2 这样的设备上则能减少到 1.5 帧,这和 iOS 8 中的四帧延迟相比,降低的幅度确实很大。
|