《iOS 6核心开发手册(第4版)》——1.10节秘诀:使用多触摸交互

简介:

本节书摘来自异步社区《iOS 6核心开发手册(第4版)》一书中的第1章,第1.10节秘诀:使用多触摸交互,作者 【美】Erica Sadun,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.10 秘诀:使用多触摸交互
iOS 6核心开发手册(第4版)
在UIView实例中启用多触摸交互可以让iOS一次找回并响应多个手指触摸。把UIView的属性multipleTouchEnabled设置为YES或者重写视图的isMultipleTouchEnabled。当启用该属性时,每个触摸回调都会返回一个完整的触摸集。当该触摸集的计数超过1时,就知道正在处理多触摸。

理论上讲,iOS支持任意数量的触摸。可以通过在iPad上运行下面的秘诀并且同时使用尽可能多的手指来探究这个限制。实际的上限会随着时间推移而改变,这个秘诀通过提供一个特定的数字审慎地表示异议。

在第一次在iPhone上探索多触摸时,开发人员没有奢望多触摸与多用户相结合所提供的自由度和灵活性。给游戏和其他应用程序添加多触摸特性不仅可以为扩展的姿势大开方便之门,还提供了新的方式创建极度令人兴奋的多用户体验,尤其是在像iPad这样较大的屏幕上。在任何实用和有意义的地方,我都鼓励你在应用程序中包括多触摸支持。

多触摸没有分组。例如,如果利用每一只手的两根手指触摸屏幕,将无法确定触摸属于哪只手。触摸的顺序也是随意而定的。尽管分组的触摸将在单个触摸事件的生存期内(从触摸按下到移动再到释放)保持相同的手指顺序(或者更确切地讲,保持相同的内存地址),但是在下一次触摸屏幕时,触摸与手指之间的对应关系很可能会改变。当需要把触摸彼此区分开时,可以构建一个触摸字典,并按触摸对象对其建立索引,如这个秘诀中所示。

如果需要,可以构建额外的手指触摸,知道这一点也许会让人感到宽慰。不幸的是,当一次使用3个或更多的触摸时,屏幕具有一个明显的趋势,即失去对其中一根或多根手指的跟踪。当使用两根手指以上的触摸时,很难以编程方式跟踪平滑的姿势。因此,无须关注姿势解释,而可以把多触摸体验视作是一系列限时的独立交互。可以把每个触摸看作是截然不同的项目,并独立于其他触摸处理它。

秘诀1-9给UIView添加了多触摸支持,这是通过设置其multipleTouchEnabled属性并沿着每根手指绘制的线条前进来实现的。它会跟踪每个触摸在内存中的物理地址,但不会依据Apple的建议指向或保留触摸。

显然,这是一种古怪的方法,但它在SDK的整个历史中都能够可靠地工作。这是由于每个UITouch对象在整个触摸—移动—释放生命周期内都驻留在单个地址处。Apple建议反对保留UITouch实例,这是由于在这个秘诀中把这些对象的整数值用作键。通过把物理地址用作键,可以区分每个触摸,甚至在添加新触摸或者从屏幕上删除旧触摸时也可如此。

要知道的是,在其他触摸移动、结束或取消时,新触摸可以通过touchesBegan:withEvent:独立于其他触摸开始它们的生命周期。你的代码应该反映这种现实情况。

这个秘诀是从秘诀1-7扩展而来的。每个触摸都会延长单独的贝塞尔曲线路径,它是在视图的drawRect方法中绘制的。秘诀1-7实质上在每个触摸周期的末尾开始了新的绘图工作,这非常适合于记账应用程序,但是当涉及创建标准的绘图应用程序时,如果你期望以迭代方式向图片中添加元素,这将会失败。

秘诀1-9继续向合成图片中添加迹线,但是不会清除旧项目。将触摸收集进一个不断增长的可变数组中,可以根据用户需要清除它。这个秘诀以一种稍淡一些的颜色绘制正在进行的跟踪,以将其与已经存储到绘图的笔画数组中的路径区分开。


c43faf08463b3d3f464ec501dc52d0004f3e82a8


227c05e3e4e45f46c59e6bb725d9da37bb01c6ae
相关文章
|
iOS开发
(六)IOS手势和触摸的用法
(六)IOS手势和触摸的用法
225 0
|
缓存 安全 Linux
自建iOS构建流水线建设核心原理剖析
文章主要从iOS打包机远程构建的角度分析,整体链路脚本涉及的shell、ruby、security指令、xml以及iOS工程化相关知识,文章通过一个远程构建流程简单并重点的讲解了如何规避本地打包环境下的小的修改出包存在的大量人工操作,如何动态化配置证书、版本号等信息以及内测分发方式的避坑点。
自建iOS构建流水线建设核心原理剖析
|
移动开发 JavaScript weex
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
251 0
|
移动开发 JavaScript Android开发
h5(vue)嵌套ios和android双向交互
h5(vue)嵌套ios和android双向交互
499 0
h5(vue)嵌套ios和android双向交互
|
容器
iOS11新特性:新增拖拽交互体验(三)
iOS11新特性:新增拖拽交互体验
568 0
iOS11新特性:新增拖拽交互体验(三)
|
iOS开发 开发者
iOS11新特性:新增拖拽交互体验(一)
iOS11新特性:新增拖拽交互体验
552 0
iOS11新特性:新增拖拽交互体验(一)
|
数据安全/隐私保护 iOS开发 开发者
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(二)
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建
330 0
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(二)
|
数据安全/隐私保护 iOS开发 开发者
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(一)
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建
464 0
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(一)
|
iOS开发 开发者
iOS开发CoreGraphics核心图形框架之八——层聚合
iOS开发CoreGraphics核心图形框架之八——层聚合
183 0
iOS开发CoreGraphics核心图形框架之八——层聚合
|
iOS开发 开发者
iOS开发CoreGraphics核心图形框架之六——梯度渐变(二)
iOS开发CoreGraphics核心图形框架之六——梯度渐变
217 0
iOS开发CoreGraphics核心图形框架之六——梯度渐变(二)
下一篇
无影云桌面