1、关于手势识别
Gesture Recognizers是一类手势识别器对象,它可以附属在你指定的View上,并且为其设定指定的手势操作,例如是点击、滑动或者是拖拽。当触控事件 发生时,
设置了Gesture Recognizers的View会先通过识别器去拦截触控事件,如果该触控事件是事先为View设定的触控监听事件,那么Gesture Recognizers将会发送动作消息给目标处理对象,目标处理对象则对这次触控事件进行处理。
在一个view中重写了touchBegin和touchEnd 添加了单击手势识别,那么手势识别会拦截touch消息,touchBegin会打印,但是touchEnd由于被拦截所以没有打印。
添加一个滑动手势识别,同样是有touchBegin和touchMove打印而没有touchEnd。
在一个button上也添加一个单击手势,是响应button的点击事件还是响应手势识别事件呢?
button的点击事件其实也是由touchBegin和touchEnd来实现的,根据上个分析,手势识别是会拦截touchBegin和touchEnd的,所以只会响应手势识别的事件。
2、关于touch触摸事件的参数
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
在屏幕上的每一次动作事件都是一次Touch,在iOS中用UITouch对象表示每一次的触控,多个Touch组成一次Event,用UIEvent来表示一次事件对象。
NSArray *arrayTouches = [event.allTouches allObjects];
UITouch *aTouch = [arrayTouches objectAtIndex:0];
UITouch * bTouch = [touches anyObject];
if (aTouch == bTouch) {
NSLog(@"same touch");
}
在touches中的touch对象和在event中的对象是同一个,一般单击的时候用touches 多点触摸的时候用event(按照理解touches是个集合多点触摸的时候应该有两个触摸对象,但是每次都只返回一个)