UI进阶之手势识别

手势识别

一:使用手势识别触摸事件的缘由

若是想监听一个view上面的触摸事件,以前的作法一般是:先自定义一个view,而后再实现view的touches方法,在方法内部实现具体处理代码ui

经过touches方法监听view触摸事件,有很明显的几个缺点spa

(1)必须得自定义view3d

(2)因为是在view内部的touches方法中监听触摸事件,所以默认状况下,没法让其余外界对象监听view的触摸事件(须要经过代理)代理

(3)不容易区分用户的具体手势行为对象

iOS 3.2以后,苹果推出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度事件

2、手势识别器ip

为了完成手势识别,必须借助于手势识别器----UIGestureRecognizer开发

利用UIGestureRecognizer,能轻松识别用户在某个view上面作的一些常见手势get

UIGestureRecognizer是一个抽象类,定义了全部手势的基本行为,使用它的子类才能处理具体的手势it

UITapGestureRecognizer(敲击)

UIPinchGestureRecognizer(捏合,用于缩放)

UIPanGestureRecognizer(拖拽)

UISwipeGestureRecognizer(轻扫)

UIRotationGestureRecognizer(旋转)

UILongPressGestureRecognizer(长按)

三:UITapGestureRecognizer
用法:
1,建立手势对象 
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
2,设置手势对象属性:

// 连续敲击2次

tap.numberOfTapsRequired = 2;

// 须要2根手指一块儿敲击

tap.numberOfTouchesRequired = 2;

3,添加手势识别器到view上
[self.iconView addGestureRecognizer:tap];
4,监听手势的触发
[tap addTarget:self action:@selector(tapIconView:)];

属性介绍:

numberOfTouchesRequired   //须要多少根手指一块儿敲击(默认为1根)

numberOfTapsRequired    //须要敲击多少下(默认为1)

四:UISwipeGestureRecognizer
属性值:direction,判断清扫的方向,默认是right
 
提示:swipe.direction=UISwipeGestureRecognizerDirectionDown|UISwipeGestureRecognizerDirectionUp;这种方式最多只支持1个方向的清扫。
五:UIPanGestureRecognizer
 UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc]init];
 
 
两个属性值:
1, 以控制器上的view的左上角为坐标原点
CGPoint point=[pan locationInView:pan.view];

2,返回的值以触摸点为原点的距离
注意使用这个方法后必定要清零

[pan setTranslation:CGPointZero inView:pan.view];

每次移动距离都是相对原点来计算:例如第一次中点移动了1个距离。
手指移动到2是,距离实际为2,而中点只须要移动1个距离。
 
六:UIRotationGestureRecognizer
属性值:rotation;
缩度
 
 
七:UIPinchGestureRecognizer
属性值:scale
一样的然也会出 现累记的问题
 
 
 
注意:1,手势器:记得清除累加的问题
2,若是想使用多个手势操做,使用代理
3,imageview默认不会跟用户交互
 
 
 
CGPoint point1=[pan translationInView:pan.view];
相关文章
相关标签/搜索