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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《iOS 9 开发指南》——第6章,第6.3节Interface Builder采用的方法
本节书摘来自异步社区《iOS 9 开发指南》一书中的第6章,第6.3节 Interface Builder采用的方法,作者 管蕾,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.3 Interface Builder采用的方法iOS 9 开发指南通过使用Xcode和Cocoa工具集,可手工编写生成iOS界面的代码,实现实例化界面对象、指定它们出现在屏幕的什么位置、设置对象的属性以及使其可见。例如通过下面的代码,可以在iOS设备屏幕的一角中显示文本“Hello Xcode”: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]]; // Override point for customization after application launch. UILa...
- 下一篇
《Android应用开发》——1.7节小结
本节书摘来自异步社区《Android应用开发》一书中的第1章,第1.7节小结,作者 【美】Chris Haseman,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.7 小结Android应用开发本章内容涵盖了下载、安装、配置、创建和运行Android应用几方面。现在掌握了非常基本的工具,后文中会用到它们。如果阅读后文时理解主题有困难,可以随时回到本章查阅。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)