若是想监听一个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(长按)
// 连续敲击2次
tap.numberOfTapsRequired = 2;
// 须要2根手指一块儿敲击
tap.numberOfTouchesRequired = 2;
属性介绍:
numberOfTouchesRequired //须要多少根手指一块儿敲击(默认为1根)
numberOfTapsRequired //须要敲击多少下(默认为1)
提示:swipe.direction=UISwipeGestureRecognizerDirectionDown|UISwipeGestureRecognizerDirectionUp;这种方式最多只支持1个方向的清扫。
五:UIPanGestureRecognizer
UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc]init];
CGPoint point=[pan locationInView:pan.view];
2,返回的值以触摸点为原点的距离
[pan setTranslation:CGPointZero inView:pan.view];
CGPoint point1=[pan translationInView:pan.view];