1.touch事件的传递是从上往下传递。如果子类截获了touch事件父类不会在响应touch事件,但是在子类的touchbegin接口中加入[super touchbegin。。。。]则父类就能响应子类的touch事件。
2.怎么让touch和手势同时存在一个view中?
一般情况下,手势发生的时候先调用代理中shouldReceiveTouch:方法后执行touch事件。目的是询问delegate是否允许手势接收一个touch对象。如果返回yes表示允许接收反之,返回NO。
另外注意手势中的几个属性:
属性:cancelsTouchesInView 用来表示当手势被识别以后是否允许识别touch对象。default = YES;
delaysTouchesBegin 用来表示 接收者解析view的时候是否延迟发送touch对象。if YES,view 在UITouchBegin 和 UITouchPhaseMoved两个阶段解析touch事件。
if NO,view 在UITouchBegin阶段把touch对象挂起。如果识别出来了手势,则把touch对象给丢弃。如果没有识别出来,则把touch对象发送到touch begin。。。。。
UIPinchGestureRecognizer * pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(doPinch:)];
pinchRecognizer.delegate = self;
pinchRecognizer.cancelsTouchesInView = YES;
pinchRecognizer.delaysTouchesBegan = YES;
[self addGestureRecognizer:pinchRecognizer];
其中delegate中的方法全部返回YES。