《iOS 6核心开发手册(第4版)》——1.4节秘诀:同时使用多个姿势识别器

简介:

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

1.4 秘诀:同时使用多个姿势识别器
iOS 6核心开发手册(第4版)
秘诀1-3建立了秘诀1-2中展示的思想,但是具有几点差别。第一,它引入了多个识别器,它们并行工作。为了实现这一点,代码使用3个单独的识别器(旋转、捏合和平移),并把它们都添加到DragView的gestureRecognizers属性中。第二,它把DragView指定为每个识别器的委托。这允许DragView实现gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:委托方法,使这些识别器能够同时工作。在添加该方法以返回YES作为它的值之前,一次将只有一个识别器接管工作。使用并行的识别器允许(例如)同时进行缩放和旋转,以响应用户的捏合姿势。

注意:
UITouch对象存储一个姿势识别器的数组。这个数组中的项目代表每个识别器,它接收正在处理的触摸对象。当创建的视图不带有姿势识别器时,将把带有空识别器数组的触摸传递给它的响应者方法。
秘诀1-3扩展了视图的状态,以包括缩放和旋转实例变量。这些项目用于跟踪以前的变换值,并允许代码构建复合仿射变换。在秘诀1-3的updateTransformWithOffset:方法中建立的这些复合变换把平移、旋转和缩放结合进单个结果中。与前一个秘诀不同,这个秘诀统一使用变换对其对象应用改变,这是识别器的标准实践。

最后,这个秘诀引入了一个混合方法进行姿势识别。秘诀1-3没有向视图的识别器数组中添加一个UITapGestureRecognizer,而是演示了如何添加秘诀1-1中使用的基本触摸方法类型来捕获三点按。在这个示例中,三点按将把视图重置回一致变换。这会撤销以前应用于视图的任何操作,并使其恢复原始位置、方向和大小。可以看到,触摸开始、移动、结束和取消方法与姿势识别器回调一起无缝地工作,这就是在这个秘诀中包括这个额外细节的意义。添加一个点按识别器同样工作得很好。

这个秘诀演示了使用姿势识别器与触摸交互的简洁性。


faf2861b3d4f328307f8ed5829a8761f2c7fa20b


5b36915565008ba4dc9bfc4ae188c876547daf69

1.4.1 解决姿势冲突
当需要同时识别多种姿势类型时,可能会发生姿势冲突。例如,当需要识别单点按和双点按时会发生什么?如果单点按识别器在第一次点按时触发,甚至当用户打算输入双点按时则会发生什么?或者如果你等待并且仅当很清楚用户将不会添加第二次点按之后才做出响应,则该如何?iOS SDK允许在代码中考虑这些冲突。

你的类可以指定一种姿势必须失败,以便使另一种姿势获得成功,可以调用require Gesture RecognizerToFail:来实现这一点。这是一个姿势方法,它接受一个参数,即另一个姿势识别器。这个调用将在接收这条消息的对象与另一个姿势对象之间创建一种相关性。它的含义是:为了使第一个姿势触发,第二个姿势必须失败;如果第二个姿势被识别,那么第一个姿势将不会。

在实际中,这通常意味着识别器添加了一个延迟,直到它可以确信相关的识别器失败为止。它会等到第二个识别器不再可能为止。直到那时,第一个识别器才完成。如果同时识别了单点按和双点按,应用程序在第一次点按之后将等待稍长一点的时间;如果没有第二次点按发生,就会触发单点按;否则,就会触发双按,但不会同时触发这二者。

你的GUI响应将会放慢速度以适应这种变化。单点按响应会变得稍后滞后一些,这是由于在时间消逝之前无法辨别第二次点按是否到来。如果即时响应对于用户体验至关重要,那么永远也不应该同时使用这两类识别器。可代之以尝试围绕着点按意味着“现在做某件事情”的情况进行设计,并且避免同时需要用于这些模式的两种姿势。

不要忘记你可以自由地添加、删除和禁用姿势识别器。单点按可能把界面带到某个位置,它对于进一步区分单点按和双点按是有意义的。当保留该模式时,可以禁用或删除双点按识别器,以重新获得更好的单点按识别。这样的调整将把界面减速限制于绝对需要它们的地方。

相关文章
|
缓存 安全 Linux
自建iOS构建流水线建设核心原理剖析
文章主要从iOS打包机远程构建的角度分析,整体链路脚本涉及的shell、ruby、security指令、xml以及iOS工程化相关知识,文章通过一个远程构建流程简单并重点的讲解了如何规避本地打包环境下的小的修改出包存在的大量人工操作,如何动态化配置证书、版本号等信息以及内测分发方式的避坑点。
自建iOS构建流水线建设核心原理剖析
|
数据安全/隐私保护 iOS开发 开发者
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(二)
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建
283 0
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(二)
|
数据安全/隐私保护 iOS开发 开发者
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(一)
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建
394 0
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(一)
|
iOS开发 开发者
iOS开发CoreGraphics核心图形框架之八——层聚合
iOS开发CoreGraphics核心图形框架之八——层聚合
151 0
iOS开发CoreGraphics核心图形框架之八——层聚合
|
iOS开发 开发者
iOS开发CoreGraphics核心图形框架之六——梯度渐变(二)
iOS开发CoreGraphics核心图形框架之六——梯度渐变
180 0
iOS开发CoreGraphics核心图形框架之六——梯度渐变(二)
|
iOS开发 开发者
iOS开发CoreGraphics核心图形框架之六——梯度渐变(一)
iOS开发CoreGraphics核心图形框架之六——梯度渐变
245 0
iOS开发CoreGraphics核心图形框架之六——梯度渐变(一)
|
开发者 iOS开发 容器
iOS开发CoreGraphics核心图形框架之五——Patterns模型的应用
iOS开发CoreGraphics核心图形框架之五——Patterns模型的应用
187 0
iOS开发CoreGraphics核心图形框架之五——Patterns模型的应用
|
iOS开发 开发者
iOS开发CoreGraphics核心图形框架之四——变换函数
iOS开发CoreGraphics核心图形框架之四——变换函数
130 0
|
iOS开发 索引
iOS开发CoreGraphics核心图形框架之三——颜色与色彩空间
iOS开发CoreGraphics核心图形框架之三——颜色与色彩空间
465 0
iOS开发CoreGraphics核心图形框架之三——颜色与色彩空间
|
API 数据安全/隐私保护 iOS开发
iOS开发CoreGraphics核心图形框架之二——深入理解图形上下文(二)
iOS开发CoreGraphics核心图形框架之二——深入理解图形上下文
336 0