开发者社区> 异步社区> 正文

《iOS 6核心开发手册(第4版)》——1.13节秘诀:从滚动视图中拖动

简介:
+关注继续查看

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

1.13 秘诀:从滚动视图中拖动
iOS 6核心开发手册(第4版)
iOS的丰富的姿势识别器集并不总是能够准确地实现你想要达到的目标。下面举一个例子。设想一个水平滚动的视图,其中一个接一个地填充图像视图,因此可以左右滚动,查看完整的集合。现在,设想你希望能够把项目拖出那个视图,并把它们添加到滚动区域下面的空间中。为此,需要识别那些子视图上向下的触摸(也就是说,垂直于滚动的方向)。

这是我在尝试帮助开发人员Alex Hosgrove时所遇到的一道难题,他尝试构建一个应用程序,它粗略等价于一组冰箱磁贴字母,用户可以把那些字母向下拖动到工作区中,然后处理并排列他们所选的项目。这种情况有两个挑战。第一,谁拥有每个触摸?第二,在识别向下的触摸之后会发生什么?

滚动视图及其子视图都拥有每个触摸中感兴趣的方面。向下的姿势应该生成新对象,横向的姿势应该会平移滚动视图。触摸必须共享,以允许滚动视图及其子视图响应用户交互。可以使用姿势委托解决这个问题。

姿势委托允许添加同时的识别,因此两个识别器可以同时工作。可以通过声明一个协议(UIGestureRecognizerDelegate)并添加一个简单的委托方法来添加这种行为。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
     shouldRecognizeSimultaneouslyWithGestureRecognizer:
          (UIGestureRecognizer *)otherGestureRecognizer
{   
     return YES;
}

不能为滚动视图重新指定姿势委托,因此必须把这个委托重写添加到用于滚动视图的子视图的实现中。

第二个问题(即把轻扫转换为拖动)是通过考虑整个触摸生存期来解决的。每个创建新对象的触摸都开始于一个有向的拖动,但是一旦创建了新视图,就是作为平移结束的。平移识别器在这里比轻扫识别器工作得更好,后者的生存期结束于识别那个时刻。

为了使之发生,秘诀1-12在内置的姿势检测外面手动添加了那个有向移动检测。最终,这种开箱即用的方法提供了重大的编码收益。这是由于一旦检测到轻扫,底层的平移姿势识别器就会继续工作。这允许用户保持移动被轻扫的对象,而不必抬起手指,并重新触摸正在处理的对象。

这种实现检测在垂直方向上至少下移16像素的轻扫,而不会向任何一边偏离超过8像素。当这段代码检测到一个向下的轻扫时,它会向屏幕上添加一个新的DragView(本章前面使用的相同的类),并且允许它为剩余的平移姿势交互沿着触摸前进。

在识别时,类将把它自身标记为处理了轻扫(gestureWasHandled),并且会在平移事件期间禁用滚动视图。这允许子视图完全控制正在进行的平移姿势,而无须滚动视图对进一步的触摸移动做出反应。


1433d1b12deb611c3444fe93ffe3e628a704ef1c


7464793d088bb1c82a976563e57469646e38f8d6

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
自建iOS构建流水线建设核心原理剖析
文章主要从iOS打包机远程构建的角度分析,整体链路脚本涉及的shell、ruby、security指令、xml以及iOS工程化相关知识,文章通过一个远程构建流程简单并重点的讲解了如何规避本地打包环境下的小的修改出包存在的大量人工操作,如何动态化配置证书、版本号等信息以及内测分发方式的避坑点。
31078 0
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(二)
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建
152 0
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建(一)
iOS开发CoreGraphics核心图形框架之九——PDF文件的渲染与创建
213 0
iOS开发CoreGraphics核心图形框架之八——层聚合
iOS开发CoreGraphics核心图形框架之八——层聚合
80 0
iOS开发CoreGraphics核心图形框架之六——梯度渐变(二)
iOS开发CoreGraphics核心图形框架之六——梯度渐变
85 0
iOS开发CoreGraphics核心图形框架之六——梯度渐变(一)
iOS开发CoreGraphics核心图形框架之六——梯度渐变
135 0
iOS开发CoreGraphics核心图形框架之五——Patterns模型的应用
iOS开发CoreGraphics核心图形框架之五——Patterns模型的应用
100 0
iOS开发CoreGraphics核心图形框架之四——变换函数
iOS开发CoreGraphics核心图形框架之四——变换函数
73 0
iOS开发CoreGraphics核心图形框架之三——颜色与色彩空间
iOS开发CoreGraphics核心图形框架之三——颜色与色彩空间
242 0
iOS开发CoreGraphics核心图形框架之二——深入理解图形上下文(二)
iOS开发CoreGraphics核心图形框架之二——深入理解图形上下文
153 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
Facebook iOS App技术演化十年之路
立即下载
From Java_Android to Swift iOS
立即下载
深入剖析 iOS 性能优化
立即下载