Date
Dec. 22nd, 2024
 
2024年 11月 22日

Post: iOS 9 : Advanced Touch Input

iOS 9 : Advanced Touch Input

Published 12:10 Oct 07, 2015.

Created by @ezra. Categorized in #Programming, and tagged as #iOS.

Source format: Markdown

Table of Content

一直以来 iOS 的触摸输入操作的延迟都为人诟病,如果你常用绘图应用,你应该也有过类似的体验: 当你在屏幕上描绘线条,如果速度较快,那么线条就总是在手指触摸位置的后面一段距离追赶。在 iOS 9 中苹果针对这一问题做了改善,从手势的获取,到屏幕的显示,各个环节都做了性能优化来减少时间延迟。

关于其他 iOS 9 的特性与功能,有兴趣的朋友可以参考我博客中的 iOS 9 适配系列

Low Latency 低延迟

对于低延迟的使用,苹果提供了这样的代码:

// For lowest latency (default):
layer.presentsWithTransaction = false;

// For synchronizing with CA:
layer.presentsWithTransaction = true

也就是说,如果用 OpenGL ES 渲染,将 CAEAGLLayerpresentsWithTransaction 属性设值为 false 即可降低延迟,当然你也可以不设置,因为 false 是它的默认值;如果用 Metal 渲染则只需将 MTKViewpresentsWithTransaction 属性设值为 false;如果你不知道我在说什么,请关闭浏览器。

除了 Core Animation 性能的增强外,苹果还引入 Touch Coalescing 和 Touch Prediction 来提升显示效果。

Touch Coalescing 触控合并

在 iOS 9 之前,应用触摸扫描频率、渲染帧率、应用代码扫描频率均为 60Hz,而在 iPad Air 2 中,点扫描(Touch Scan)触摸扫描频率为 120Hz,也就是说有 iPad Air 2 中一半的点被丢弃了。而通过 Touch Coalescing,即可将没被直接响应的点合并到响应的触摸事件中。

for touch in touches {
  let line = lineForTouch(touch)
  for coalescedTouch in event.coalescedTouchesForTouch(touch) {
       addTouchSample(coalescedTouch, toLine: line)
  }
}

Touch Prediction 触控预测

Touch Prediction 的功能正如它的名字,也即预测后续触摸点的大致走向。

for touch in touches {
    let line = lineForTouch(touch)
    for predictedTouch in event.predictedTouchesForTouch(touch) {
       addTouchSample(predictedTouch, toLine: line)
    }
}
Pinned Message
HOTODOGO
The Founder and CEO of Infeca Technology.
Developer, Designer, Blogger.
Big fan of Apple, Love of colour.
Feel free to contact me.
反曲点科技创始人和首席执行官。
开发、设计与写作皆为所长。
热爱苹果、钟情色彩。
随时恭候 垂询