IOS开发UI篇—gesture详解(一)

前言  

  在iOS中,你可以使用系统内置的手势识别(GestureRecognizer),也可以创建自己的手势.GestureRecognizer将低级别的转换为高级别的执行行为,是你绑定到view的对象,当发生手势,绑定到的view对象会响应,它确定这个动作是否对应一个特定的手势(swipe,pinch,pan,rotation).如果它能识别这个手势,那么就会向绑定它的view发送消息,如下图

 

 UIKit框架提供了一些预定义的GestureRecognizer.包含下列手势

  •  UITapGestureRecognizer敲击手势(单击和双击)
  •  UIPanGestureRecognizer(拖动手势)
  •  UIPinchGestureRecognizer(缩放手势)
  •  UISwipeGestureRecognizer(擦碰手势)
  •  UIRotationGestureRecognizer(旋转手势)
  •  UILongPressGestureRecognizer(长按手势)

如果你想让你的应用程序来识别一个独特的手势,如选择目录或纠结的运动,你可以创建自己的自定义GestureRecognizer,将在下篇介绍

将特定的手势和view相关联

  每一个特定的手势必须关联到view对象中才会有作用,一个view对象可以关联多个不同的特定手势,但是每一个特定的手势只能与一个view相关联。当用户触摸了view,这个GestureRecognizer就会接受到消息,它可以响应特定的触摸事件。

与特定view关联

  • 创建GestureRecognizer实例

 

  • addGestureRecognizer
  • 实现处理手势的方法

可以使用removeGestureRecognizer: 来移除手势。

代码

 

手势识别状态

  

Gesture recognizers从一个状态转到另一状态(state)。对于每个状态,根据它们是否符合特定条件来决定时候可以移动到下一个状态。它们分析多点触摸。是否识别失败。未能识别手势意味着state 转换失败。UIGestureRecognizerStateFailed。详见UIGestureRecognizerState枚举

代码

 

为view添加多个手势

  当一个view添加多个手势时,在缺省情况下,没有为优先执行哪个手势做排序,每次发生不同。不过你可以覆盖默认的行为(使用类方法、委托方法、和子类化覆盖这些)

  • 指定一个Gesture recognizers应该在另一个前捕捉。

requireGestureRecognizerToFail: 这个方法就是在作为参数的Gesture recognizer失败以后接受者才发生,否则从不会发生。

[self.panRecognizer requireGestureRecognizerToFail:self.swipeRecognizer];
  • 允许2个手势同时操作

gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

  • 禁止在某一点发生Gesture recognizers
代码

指定一个单向关系两个手势识别器

想控制两个识别器相互作用,但你需要指定一个单向关系,您可以重写或canPreventGestureRecognizer:或canBePreventedByGestureRecognizer:子类方法。return yes。例如,如果你想要一个旋转的姿态来防止捏动作,但你不想夹手势防止旋转的姿态。例如,你想一个旋转手势阻止一个缩放手势,但你不想一个缩放手势阻止旋转手势,就加入下面代码

[rotationGestureRecognizer canPreventGestureRecognizer:pinchGestureRecognizer];

posted on 2015-05-03 17:30  iosblog's  阅读(1025)  评论(0编辑  收藏  举报

导航