UIGestureRecognizer

UIGestureRecognizer

1.是什么?

专门用来处理手势识别的类.

2.有什么用?

这是一个抽象类.通过其具体子类可以处理手势识别,

具体子类.

UITapGestureRecognizer//轻拍

UIPinchGestureRecognizer//缩放

UIRotationGestureRecognizer//旋转

UISwipeGestureRecognizer//轻扫

UIPanGestureRecognizer//拖拽

UIScreenEdgePanGestureRecognizer//轻拍屏幕边缘

UILongPressGestureRecognizer//长按

3.怎么用?

>1.创建.

>2.添加给需要进行手势识别的视图:addGestureRecognizer

>3.添加识别后处理的方法

例.

实现代码:

   UIRotationGestureRecognizer *rotatetion = [[UIRotationGestureRecognizer alloc]init];

    [self.pinkView addGestureRecognizer:rotatetion];

    [rotatetion addTarget:self action:@selector(rotationPinkView:)];
- (void)rotationPinkView:(UIRotationGestureRecognizer *)rotation
{

    self.pinkView.transform = CGAffineTransformMakeRotation(rotation.rotation);
}

其他的几个手势处理的类的用法格式上是一致的,此处不赘述.

4.UIGestureRecognizer的代理方法.

>1.同时识别多个手势操作.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

说是同时,但是单位时间还是只能处理一个手势,只不过只要此处返回YES,比如一边旋转一边缩放,旋转完成后,松手,缩放同样有效.

>2.是否允许接收触摸对象,就是是否允许视图对手势做出反应.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

返回NO,不识别手势操作.

5.注意:

>1.有一个需要注意的地方:当使用旋转的时候,如果用rotate,将当前的transform传递进去,会越转越快.因为roation属性是旋转角度,比如第一次旋转10,被旋转视图停留在10度的位置,再次旋转,如果在当前基础上旋转10,也就是相当于初始位置旋转了20,就是说,调用对应的手势识别方法时,会在10度的基础上再次旋转20,也就是说你手指虽然旋转了20,但是被旋转视图实际上旋转了30.

6.什么时候用?

UIResponder的touch系列方法也可以处理屏幕的手势,touches系列方法由UIResponder提供,只有继承自UIResponder的类才识别手势,UIView继承自UIResponder,所有的UI控件都继承自UIView,因而所有的控件都具有touches系列方法.

但是有一个致命弱点,touches系列方法只能监听触摸对象在视图上的位置,而无法识别触摸的状态-----轻重缓急,从左到右等方向,等等手势操作,UIGestureRecognizer刚好可以弥补这一点.因此,需要识别手势的状态是可以使用UIGestureRecognizer来处理.

 

posted @ 2016-02-28 22:30  Matrix_Neo  阅读(327)  评论(0编辑  收藏  举报