金田

今天要讲的主题是iOS 9高级触摸输入,更准确地讲,是在iOS9上如何减少触摸输入到屏幕显示的延迟程度,此次将分 低延迟渲染(iOS9 渲染性能优化)和 触摸点方案改进 两个方面来介绍。

低延迟渲染

1)介绍

一直以来,iOS 里面的触摸手势延迟(latency)是一个极为影响用户体验,比较头痛,却又比较棘手的一个问题。试想我们画一条线,手势稍快一点就会是手指在前面跑,画的线在后面追。

图1.1 手势延迟示意图(截取自WWDC演示文档)

值得我们关注的是,此次发布的iOS 9操作系统,专门争对这一问题,进行了优化。

首先,iOS9从获取到手势点到显示至屏幕的各环节,进行性能优化,缩短每个手势事件反馈到屏幕的时间延时(latency)。

图2 iOS8 Touch与渲染管理示意图(截取自WWDC演示文档)

图3 iOS9 Touch与渲染管理示意图(截取自WWDC演示文档)

从上图示可以看出,iOS 9系统对系统进行了优化,从而提升App、以及App内容渲染各环节的性能,进而达到降低延迟的目的。

2)使用

上面讲了这么多,到底该如何使用低延时(low latency)功能呢?

// For lowest latency (default):

layer.presentsWithTransaction = false;

// For synchronizing with CA:

layer.presentsWithTransaction = true

当采用OpenGL ES做渲染时,只需要给CAEAGLLayer presentsWithTransaction属性设置为false(默认),即可降低延迟。如果是采用的Metal,则只要将MTKView的presentsWithTransaction属性设置为false(默认),即可降低延迟。

触摸点方案改进

iOS 9在通过提升CA(Core Animation)性能减少延迟的同时,也采用一些方案来提升App的呈现效果。当然,此次iOS9争对触控点做了非常大的改进和优化,iOS 9新API有引入了 Touch Coalescing(触控合并)和  Touch Prediction(触控预测)。下面我们就争对Touch Coalescing(触控合并)和  Touch Prediction(触控预测)做相应的介绍。

1、 Touch Coalescing(触控拟合)

iOS8及以前,App的触摸扫描频率、渲染帧率均是60Hz,做过绘图功能的朋友应该对下面这张图不会陌生。

图2.1 60Hz扫描点直接连线效果示意图

此外目前iPad Air 2 点扫描(Touch Scan)触摸扫描频率已经达到120Hz,直接将点相连,示意图如下:

图2.2 120Hz扫描点直接连线效果示意图

App代码处理的频率同样是60Hz,所以事实上,在iPad Air2上面,有一半的点被丢掉,但现在iOS 9的Touch Coalescing 有完美解决这一问题,iOS9有将没被直接响应的点合并(Coalescing)到了响应的触摸事件内。

图2.3 iOS 9点拟合(Coalescing)示意图

Touch Coalescing 功能的应用

[swift 代码]

for touch in touches {

let line = lineForTouch(touch)

for coalescedTouch in event.coalescedTouchesForTouch(touch) {

addTouchSample(coalescedTouch, toLine: line)

}

}

[Object-c 代码]

for (UITouch *coalescedTouche in [event coalescedTouchesForTouch:[touches anyObject]]) {

//Use UITouch

}

2、Touch Prediction(触摸点预测)

通过该方部分,可以预测接下来的触摸点未来的大致走向。如示意图:

图2.4 触摸点预测示意图

 

通过该部分,能提前预测到触摸点未来将要走的可能趋势。

Touch Prediction 用法

[Swift 代码]

for touch in touches {

let line = lineForTouch(touch)

for predictedTouch in event.predictedTouchesForTouch(touch) {

addTouchSample(predictedTouch, toLine: line)

}

}

[Objective-c 代码]

for (UITouch *touch in touches) {

for (UITouch *predictedTouch in [event predictedTouchesForTouch:touch]) {

//Use Predicted Touch

}

}

版权所有,转载须注明作者( 金田)及原文出处(原文)。

iOS 9之Advanced Touch Input(高级触摸输入)的更多相关文章

  1. 与众不同 windows phone (24) - Input(输入)之软键盘类型, XNA 方式启动软键盘, UIElement 的 Touch 相关事件, 触摸涂鸦

    原文:与众不同 windows phone (24) - Input(输入)之软键盘类型, XNA 方式启动软键盘, UIElement 的 Touch 相关事件, 触摸涂鸦 [索引页][源码下载] ...

  2. iOS programming Delegation and Text Input

    iOS programming Delegation and Text Input  1.1 Text Fields    CGRect textFieldRect = CGRectMake(40, ...

  3. ios开发——实用技术OC-Swift篇&触摸与手势识别

    iOS开发学习之触摸事件和手势识别   iOS的输入事件 触摸事件 手势识别 手机摇晃 一.iOS的输入事件   触摸事件(滑动.点击) 运动事件(摇一摇.手机倾斜.行走),不需要人为参与的 远程控制 ...

  4. 解决ios下部分手机在input设置为readonly属性时,依然显示光标

    解决ios下部分手机在input设置为readonly属性时,依然显示光标 在出现如上所说的问题是尝试给input 加上  onfocus="this.blur()"  方法 添加 ...

  5. 使用iScroll时,input等不能输入内容的解决方法

    做移动平台的应用,使用iscroll使屏幕上下滑动.发现当使用iscroll后,input等不能输入内容了.只要在iscroll.js文件中加入如下代码就ok了. function allowForm ...

  6. 使用iScroll时,input等不能输入内容的解决方法(share)

    最近做移动平台的应用,使用iscroll使屏幕上下滑动.发现当使用iscroll后,input等不能输入内容了.只要在iscroll.js文件中加入如下代码就ok了. function allowFo ...

  7. 快速入门:触摸输入(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)

    原文 http://technet.microsoft.com/zh-cn/subscriptions/hh465387 快速入门:触摸输入(使用 C#/VB/C++ 和 XAML 的 Windows ...

  8. Xamarin iOS教程之使用按钮接接收用户输入

    Xamarin iOS教程之使用按钮接接收用户输入 Xamarin iOS使用按钮接接收用户输入 按钮是用户交互的最基础控件.即使是在iPhone或者iPad中,用户使用最多操作也是通过触摸实现点击. ...

  9. 关于调整input里面的输入光标大小

    input输入框用一个背景图模拟,设置height和line-height一样的高度,使里面的输入文字能够居中, 在FF下出现的情况是:点击input时,输入光标其实上跟input的height一样高 ...

随机推荐

  1. IMS 相关名词解释

    IMS: IMS(IP Multimedia Subsystem)是IP多媒体系统,是一种全新的多媒体业务形式,它能够满足现在的终端客户更新颖.更多样化多媒体业务的需求. RCS:Rich Commu ...

  2. 行内人解读开发一个App需要多少钱?

    对于很多互联网的创业者来说,评估前期的创业成本是很重要的.在这几年的创业大潮中,伴随着“互联网+”和“互联网思维”的普及,很多创业项目选择了开发app作为创业项目的载体.在我接触到的很多创业者,找Ap ...

  3. OC与JS互相调用

    近期项目中要用到html5来实现.涉及到OC调用JS,以及JS调用OC的方法.这里把遇到的问题以及实现方法介绍一下. // // ViewController.h // OC_And_JS // // ...

  4. X-FORWARDED-FOR

    外界流传的JAVA/PHP服务器端获取客户端IP都是这么取的: 伪代码: 1)ip = request.getHeader("X-FORWARDED-FOR")     可伪造,参 ...

  5. Comprehensive learning path – Data Science in Python深入学习路径-使用python数据中学习

    http://blog.csdn.net/pipisorry/article/details/44245575 关于怎么学习python,并将python用于数据科学.数据分析.机器学习中的一篇非常好 ...

  6. iOS开发之多媒体API

    播放视频 视频文件介绍 视频格式可以分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类.尽管后者在播放的稳定性和播放画面质量上可能没有前者 优秀,但网络流媒体影像视频的广泛传播 ...

  7. 如何让asp.net mvc 直接运行mobile页面

    在controller里面加上下面一句 HttpContext.SetOverriddenBrowser(BrowserOverride.Mobile);

  8. 【从零学习openCV】IOS7下的人脸检測

    前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...

  9. 自定义PopupWindow动画效果

    public class RollActivity extends Activity { private View view; private Button btn; private PopupWin ...

  10. Linux如何创建一个新进程

    2016-03-31 张超<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux如何创建一个新进程 ...