我在某些cocos2d节点上使用 CCNode + SFGestureRecognizer https://github.com/krzysztofzablocki/CCNode-SFGestureRecognizers进行一些平移手势,但我还有其他节点只使用正常 ccTouchBegan / Moved /结束并使用 CCTouchOneByOneDelegate 。
但是我遇到了冲突。由于ccTouch重叠,我只需设置swallowsTouches:NO
。因为基本上我正在做的是根据触摸方向确定在ccTouchesMoved
中使用哪种触摸(主要是水平或大部分垂直),如果方向与特定节点允许的方向相匹配,该节点通过取消所有其他目标处理程序来声明触摸。
但是当一些节点使用手势识别器时,当方向不在该节点的允许方向时,我似乎不容易告诉触摸取消。在我确定其他触摸是否应声明触摸之前,gestureRecognizerShouldBegin
来电已被调用。我只是不知道取消手势触摸的正确方法。
有什么好的,干净的方法可以做到这一点吗?
答案 0 :(得分:0)
因此,CCNode + SFGestureRecognizers.m中的gestureRecognizerShouldBegin
没有正确的翻译/速度信息,但是我自己在委托中做了。委托中的shouldReceiveTouch
方法也没有此信息。
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
UIPanGestureRecognizer *pan = (UIPanGestureRecognizer*)gestureRecognizer;
CGPoint translation = [pan translationInView:pan.view];
CGPoint velocity = [pan velocityInView:pan.view];
CGPoint dragVector = /* detect direction of the translation/velocity */
// if it was a horizontal drag return YES, otherwise NO
if (dragVector.x != 0 && dragVector.y == 0) {
return YES;
}
return NO;
}
return YES;
}