我在一些CCNode+SFGestureRecognizer节点上使用ccTouchBegan/Moved/Ended https://github.com/krzysztofzablocki/CCNode-SFGestureRecognizers来做一些pan手势,但是我也有其他节点只使用普通的ccTouchBegan/Moved/Ended和CCTouchOneByOneDelegate.
但我遇到冲突了。由于ccTouch的重叠,我刚刚设置了swallowsTouches:NO。因为基本上,我要做的是根据触摸的方向(主要是水平的还是主要是垂直的)确定在ccTouchesMoved中使用哪种触摸,如果该方向匹配特定节点允许的方向,则节点通过取消所有其他目标处理程序来声明触摸。
但是,当一些节点使用手势识别器时,当该方向不在该节点的允许方向时,我似乎没有一种简单的方法告诉触摸取消。在我确定其他触摸是否应该声明触摸之前,调用了gestureRecognizerShouldBegin get。我只是不知道怎样才能取消手势的触碰。
有什么好的,干净的方法吗?
发布于 2014-04-10 19:19:44
因此,gestureRecognizerShouldBegin中的CCNode+SFGestureRecognizers.m没有正确的转换/速度信息,但是将自己的信息放在委托中。委托中的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;
}https://stackoverflow.com/questions/22975967
复制相似问题