1204--iOS之阅读Event Handling Guide for iOS 翻译(上),手势识别器

原文链接:https://www.jianshu.com/p/3778a218191b

都是别人翻译的,很牛

 

关于iOS的事件

 

    用户操作iOS设备的方式有很多种,比如触摸屏幕、摇晃设备。当用户操作硬件时,iOS系统就会将这些事件进行捕获,然后翻译成事件信息传递给手机的应用程序进行处理,这样你的程序就可以对用户的人为动作进行识别并响应,当然,你的程序所支持的动作和响应越丰富,那么程序的用户体验就会越好。 

 

1. 随意瞄一瞄

    所有的事件都以对象的方式发送给应用程序,以告之其用户的操作信息。在iOS中,事件发生的形式有很多种:Multi-Touch(多指触摸)事件,motion(手势,如tapslide等)事件,以及控制多媒体的事件。最后的那个控制多媒体的事件,比较典型的就如远程控制事件,其事件源头来自于外部感应器。

 

1.1 UIKit框架使得app感知用户手势操作变得简单

 

     iOS app可以识别各种触摸集合事件,并直观而形象地对这些事件进行响应,比如用户通过两根手指对屏幕上的某个区域进行捏合或分离(pinch)操作来缩放,使用滑动手势(flick)对屏幕某一分内容进行翻动。

      一些常见的手势基本上都直接在UIKit框架中构建集成(开发者可以直接使用)。举个例子,UIControl的子类,比如UIButtonUISlider,可以对用户的特定手势直接响应。Button直接响应用户的点击(tap)事件,Slider直接响应用户的滑动事件。开发者通过对这些控件进行配置,这些控件就会给特定的目标实例发送 触摸事件 的消息。

     当然,你也可以直接使用手势识别类(gesture recognizer)让iOS视图类(view)体现target-action机制(以对用户的特定的操作进行响应)。开发者可以将“手势识别类(gesture recognizer)的实例" 和 "某个视图实例" 进行绑定,就可以像control(控制类)那样,对某用户手势操作进行响应。

        手势识别类(gesture recognizer)为开发者提供了复杂事件处理逻辑的高度抽象接口,功能强大、可复用、适配性,自然是开发者实现对用户触摸事件处理的首选。开发者可以直接使用已集成(内建)的手势识别类,并自定义其处理动作,当然也可以自定义手势识别类来处理新的用户手势操作。

 

1.2 每一个事件都沿着特定路径去查找能够处理它的对象

       当iOS捕获到某个事件时,就会将此事件传递给某个看上去最适合处理该事件的对象,比如触摸事件传递给手指刚刚触摸位置的那个视图(view),如果这个对象无法处理该事件,iOS系统就继续将该事件传递给更深层的对象,直到找到能够对该事件作出响应处理的对象为止。这一连串的对象序列被称作为“响应链”(responder chain)iOS系统就是沿着此响应链,由最外层逐步向内层对象传递该事件,亦即将 “处理该事件的责任” 进行传递。iOS的这种机制,使得事件处理具有协调性和动态性。

 

1.3 一个UIEvent既是一个触摸(touch)、一个摇晃(shake-motion),或者一个远程控制(remote-control)事件

         大部分事件都是UIKit的UIEvent类的实例。一个UIEvent类的实例,包含了app该如何响应Event的信息。当一个客户手势发生的时候,iOS就会不断地发生event对象给app,让app来处理该事件,例如,当客户手指滑过手机屏幕的时候就是一个事件。一个event对象既是触摸、也是摇晃、也是远程控制事件、又或者时远程控制事件的子类。

 

1.4 当用户运动设备时,APP会接收到运动事件

        运动事件提供的信息包括设备的位置、方向和活动信息。通过激活运动事件,开发者可以为应用程序添加微妙而强大的功能特性。加速器和陀螺仪数据使得开发者可以检测设备的倾斜、翻转和摇晃事件。

        运动事件的来源不一样,开发者处理这些事件所需要的框架也随之而变。用户摇晃设备时,UIKit框架就会传递一个UIEvent对象给应用程序。如果开发者想要接受高频率的、连续性的加速器和陀螺仪数据,就需要使用Core Motion框架。

 

1.5 当用户操作多媒体控制器时,APP会接收到远程控制事件

        iOS控制器和外部感应器会向APP发送远程控制事件信息。这些事件允许用户控制音频和视频,比如调整扬声器的音量、视频播放的进度等。对多媒体远程控制事件的处理,就需要开发者的APP对这些类型的指令进行响应。

 

2. 预备知识

该文档默认读者具备以下知识属性:

  •  iOS APP开的基础概念
  • 创建APP用户界面的不同层面
  • 视图和视图控制器如何运作,以及如何自定义视图和视图控制器

       如果读者对以上内容不熟悉,请自行阅读相关书籍。比如通过阅读《Start Developing iOS Apps Today 》入门,然后阅读《View Programming Guide for iOS》或者 View Controller Programming Guide for iOS 》,都看了也行。

 

3. 参考

         iOS设备在提供触摸和设备运动事件的同时,大部分的iOS设备也集成有有GPS和指南针硬件,开发者的APP对它们所生成的底层数据,可能也会感兴趣。《Location Awareness Programming Guide 》讨论如何接受并处理这些位置信息数据。

          更高级的手势识别技术比如曲线滤波和应用低通滤波器,请参见《WWDC 2012: Building Advanced Gesture Recognizers 》。

许多本书涉及的样例代码都有关于手势识别器和事件处理的代码,其中包含以下项目:

       x. Simple Gesture Recognizers : 理解手势识别的完美开始。此APP展示了如何识别tapswiperotate手势,并根据不同的手势对触摸处的图片进行展示和动画效果处理。

        x. Touches 》包含了另个项目,展示了多点触摸和在屏幕内对矩形进行拖拽。一个版本使用了手势识别,另一个版本使用了自定义触摸事件处理方法。后面那个版本对于理解触摸事件尤其有意义,因为在触摸发生时直接在屏幕上对其进行展示。

        x. MoveMe》展示了当触摸事件发生时如何对图片进行动画处理。仔细阅读该项目可以帮助读者更深层的理解自定义触摸事件处理。

 

手势识别器(Gesture Recognizer

 

        手势识别器将底层的事件处理代码转换为高层的动作处理,开发者可以将其与视图类(view)进行绑定,从而使得视图类可以像控制器一样对这些动作进行响应。

        手势识别器识别用户的触摸动作,并确定是否和一些特定的手势动作相匹配,比如swipe(划)、pinch(捏)或者rotation(转)。如果识别器识别出来的和特定手势动作一致,就会向与之绑定的对象发送一条消息。目标对象通常是视图所在的视图控制器实例,从而对手势动作发生响应,如图1-1所示。这种设计模式简单而强大,开发者可动态的决定视图需要对什么样的手势动作进行响应,在不添加任何新的视图类的情况下,为任何视图实体类添加手势识别器。 

 

1.使用手势识别器简化事件处理

        UIKit框架提供内建的手势识别器来检测常见的手势动作。如果可能的话,使用内建的手势识别器是最佳选择,因为它们极大的减少了开发者的代码量。另外,使用标准的手势识别器而不是开发者自定义的可以保证

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值