iOS事件处理指南-手势识别器

物联网物联网物联网  手势识别器(Gesture Recognizers)

  手势识别器将低级别的事件处理代码转换成高级别的动作。它们是你绑定到视图上的对象,这些对象允许视图对动作进行响应,就像控件一样。手势识别器把触摸解析成一个确定的手势,例如轻拂(swip),捏合(pinch),或者旋转。如果它们识别出了被分配手势,会发送一条动作消息给一个目标对象。目标对象很典型是视图的视图控制器,视图控制器像图1-1展示的那样对手势进行响应。这种设计模式简单而又强大;你能够动态的决定一个视图要响应哪个动作,并且你能够给一个视图加上手势识别器而不用创建视图的子类。

手势识别器绑定视图

  手势识别器绑定视图

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

  UIKit framework提供了能检测到常见手势的预定义手势识别器。如果可能,使用预定义的手势识别器是最好的方式,因为预定义手势识别器的简单减少了你需要写的代码数量。并且,使用一个标准的手势识别器来代替你自己定义,能保证你的应用的行为符合用户的预期。

  如果想让你的应用识别一个独特的手势,比如打个对号或者一个旋转手势,你可以创建自定义的手势识别器。想要学习如何设计和完成你自己的手势识别器,请参见Creating a Custom Gesture Recognizer。

  内建的手势识别器识别常见的手势

  在你设计应用的时候,你需要考虑你想识别哪些手势。然后,对于每一个手势,你需要决定下表1-1中的预定义手势识别器哪一个够用。

手势UIKit 类Tapping (any number of taps)UITapGestureRecognizerPinching in and out (for zooming a view)UIPinchGestureRecognizerPanning or draggingUIPanGestureRecognizerSwiping (in any direction)UISwipeGestureRecognizerRotating (fingers moving in opposite directions)UIRotationGestureRecognizerLong press (also known as “touch and hold”)UILongPressGestureRecognizer

  你的应用应该只以用户期望的方式对手势进行反馈。例如,一个pinch应该放大缩小,一个点击应该选择某样东西。For guidelines about how to properly use gestures, see Apps Respond to Gestures, Not Clicks.

  手势识别器与视图绑定

  每个手势识别器都是和一个视图联系起来的。相比之下,一个的视图能拥有多个视图控制器,因为一个独立的视图能响应多个手势识别器。如果你想要一个手势识别器识别发生在一个特定视图上的触摸,你得把这个手势识别器绑定到这个视图上去。当用户触摸到这个视图时,手势识别器将早于视图对象收到一条触摸发生的消息。因此,这个手势识别器能够代表视图对触摸进行响应。

  手势触发动作消息

  当一个手势识别器识别出了一个特殊手势,它将发送一条动作消息给它的目标。要创建一个手势识别器,你得对它进行初始化,设置一个目标(target)和一个动作(action)。

  离散和连续的手势

  手势不是离散的就是连续的。一个离散的手势,例如点击(tap),发生一次。一个连续的手势,例如捏合(pinching),发生在一个时间段内。对于离散的手势,一个手势识别器发送给它的目标一个独立的动作消息。而连续手势的手势识别器会持续发送给目标动作消息,直到触摸序列停止,如图1-2所示。

离散和连续的手势

  离散和连续的手势

  使用手势识别器对事件响应

  为你的应用添加一个内建的手势识别器需要做三件事:

  创建并配置一个手势识别器实例;

  这一步包括指定一个目标,动作,和手势的一些特殊属性(如点击次数);

  把这个手势识别器绑定到视图上;

  完成处理这个手势的动作方法(action method)。

  使用界面构建器(IB)添加手势识别器