您现在的位置是:首页 > 文章详情

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

日期:2017-05-01点击:252

本节书摘来自异步社区《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
原文链接:https://yq.aliyun.com/articles/98292
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章