iOS 9之Advanced Touch Input(高级触摸输入)
今天要讲的主题是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(高级触摸输入)的更多相关文章
- 与众不同 windows phone (24) - Input(输入)之软键盘类型, XNA 方式启动软键盘, UIElement 的 Touch 相关事件, 触摸涂鸦
原文:与众不同 windows phone (24) - Input(输入)之软键盘类型, XNA 方式启动软键盘, UIElement 的 Touch 相关事件, 触摸涂鸦 [索引页][源码下载] ...
- iOS programming Delegation and Text Input
iOS programming Delegation and Text Input 1.1 Text Fields CGRect textFieldRect = CGRectMake(40, ...
- ios开发——实用技术OC-Swift篇&触摸与手势识别
iOS开发学习之触摸事件和手势识别 iOS的输入事件 触摸事件 手势识别 手机摇晃 一.iOS的输入事件 触摸事件(滑动.点击) 运动事件(摇一摇.手机倾斜.行走),不需要人为参与的 远程控制 ...
- 解决ios下部分手机在input设置为readonly属性时,依然显示光标
解决ios下部分手机在input设置为readonly属性时,依然显示光标 在出现如上所说的问题是尝试给input 加上 onfocus="this.blur()" 方法 添加 ...
- 使用iScroll时,input等不能输入内容的解决方法
做移动平台的应用,使用iscroll使屏幕上下滑动.发现当使用iscroll后,input等不能输入内容了.只要在iscroll.js文件中加入如下代码就ok了. function allowForm ...
- 使用iScroll时,input等不能输入内容的解决方法(share)
最近做移动平台的应用,使用iscroll使屏幕上下滑动.发现当使用iscroll后,input等不能输入内容了.只要在iscroll.js文件中加入如下代码就ok了. function allowFo ...
- 快速入门:触摸输入(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)
原文 http://technet.microsoft.com/zh-cn/subscriptions/hh465387 快速入门:触摸输入(使用 C#/VB/C++ 和 XAML 的 Windows ...
- Xamarin iOS教程之使用按钮接接收用户输入
Xamarin iOS教程之使用按钮接接收用户输入 Xamarin iOS使用按钮接接收用户输入 按钮是用户交互的最基础控件.即使是在iPhone或者iPad中,用户使用最多操作也是通过触摸实现点击. ...
- 关于调整input里面的输入光标大小
input输入框用一个背景图模拟,设置height和line-height一样的高度,使里面的输入文字能够居中, 在FF下出现的情况是:点击input时,输入光标其实上跟input的height一样高 ...
随机推荐
- 51nod-正整数分组问题(基础方程DP-01背包)
正整数分组 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. 思路: 这题的实质其实也是0-1背包问 ...
- 异步的 SQL 数据库封装
引言 我一直在寻找一种简单有效的库,它能在简化数据库相关的编程的同时提供一种异步的方法来预防死锁. 我找到的大部分库要么太繁琐,要么灵活性不足,所以我决定自己写个. 使用这个库,你可以轻松地连接到任何 ...
- hadoop-2.6.0为分布式安装
hadoop-2.6.0为分布式安装 伪分布模式集群规划(单节点)------------------------------------------------------------------- ...
- 深入解读ESB与SOA的关系
时至今日,SOA的概念渐渐清晰了. 有关ESB的概念,已经吵了好多年了,还是没有定论. 我个人认为,ESB本来就是抽象的概念,而且内涵丰富,在不同的场合含义不同.因此应该从不同的角度来认识. ...
- python数据库做成邮箱的注册系统!
#! /usr/bin/env python2.7 # -*- coding:utf-8 -*- #File:w7.py #Date:2013-7-18 #Author:wangyu import r ...
- Android Studio试用总结
Android Studio是一年前Google I/O上推出的一款Android开发IDE,他基于JetBrains’ IntelliJ IDEA,目前还在preview阶段.增强了布局拖拽和预览功 ...
- C复习手记(Day2)
1.共用体 共用体是一种特殊的结构,允许在相同的位置存储不同的数据类型.可以定义一个带有多成员的共同体,但是任何时候只能有一个成员带有值. 定义共用体: union Data { int i; flo ...
- sqlserver中的序列
序列是由用户定义的绑定到架构的对象.序列依据定义的间隔按升序或降序生成,并可配置为用尽时重新启动(循环).序列不与特定表关联.序列与表之间的关系由应用程序进行控制. 创建序列的语法: CREATE S ...
- JS正则验证格式
function test() { var temp = document.getElementById("text1"); //对电子邮件的验证 var myreg = /^([ ...
- Access中的SELECT @@IDENTITY
在Access数据库中存在select @@identity吗?答案是肯定的.但是Access一次只能执行一条SQL,多条SQL需要多次执行,这是限制.在SQL Server中,可以一次执行多条SQL ...