《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),并且会在平移事件期间禁用滚动视图。这允许子视图完全控制正在进行的平移姿势,而无须滚动视图对进一步的触摸移动做出反应。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《OpenGL ES 3.x游戏开发(上卷)》一1.2 搭建Android开发环境
本节书摘来异步社区《OpenGL ES 3.x游戏开发(上卷)》一书中的第1章,第1.2节,作者: 吴亚峰 责编: 张涛,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 搭建Android开发环境 对Android开发稍有了解的读者都知道,Android应用程序的开发一般是使用Eclipse进行。Eclipse是一款开放源代码、基于Java的可扩展开发平台。其包括一个框架和一组服务,主要通过插件来构建开发环境。本节主要介绍如何搭建基于Eclipse的Android开发环境,同时也将介绍模拟器的创建和运行等相关知识。 1.2.1 JDK的安装及环境变量的配置 JDK是整个Java开发的核心工具包,其包括了Java运行环境、Java开发工具和Java基础类库等。开发Java应用程序之前首先需要安装JDK,本小节主要介绍JDK的下载、安装以及相关环境变量的配置,详细步骤如下。 (1)首先进入Oracle公司提供的用于下载JDK安装包的网页“http://www.oracle.com/ technetwork/java/javase/downloads/index.html”,如...
- 下一篇
《Android应用开发》——2.3节意图类
本节书摘来自异步社区《Android应用开发》一书中的第2章,第2.3节意图类,作者 【美】Chris Haseman,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.3 意图类Android应用开发一个意图是一个类。在Android平台上,意图构成了主要的通信协议,用来在应用构件之间传输信息。在一个设计良好的Android应用中,构件(活动、内容提供方或服务)永远不该直接访问其他任何构件的实例。同样,意图是这些构件之间的通信方式。 本书原本可以用大半篇幅来介绍意图类的创建、使用和细节。但为了简洁并让一切尽快地运转起来,本章只介绍几个基本概念。可以到本书的其他章节寻找意图的相关内容,它们可能是整个Android平台中最常用的类。 有以下两种主要方法可以告诉Android系统,愿意接收由系统、其他应用甚至用户自己的应用所发出的意图。 在AndroidManifest.xml文件中注册一个。在系统中注册一个IntentFilter运行时对象。这两种情况都需要告诉Android系统你监听什么事件。 同样有一大堆方法可以发出意图。可以把它们广播给系统,或者可以让它们面向一个特别的活动或...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装