手指跟踪和手势识别

时间:2013-04-24 20:38:13

标签: ios objective-c cocos2d-iphone uiimageview uipangesturerecognizer

所以我正在开发一个应用程序,我的所有手势都被识别出来了。当我尝试在手指触摸屏幕的任何地方添加UIImageViews时,我的问题就来了。

这些观点是按照他们所做的手指,但问题是我相信他们正在吞下不允许手势被识别的触摸。我试过了:

[_fingerHolder1 setUserInteractionEnabled:NO];
[_fingerHolder2 setUserInteractionEnabled:NO];

但它似乎没有改变任何东西。 我在ccTouchesBegan/Moved/Ended方法中添加了这些视图,而手势在各自的处理程序中被识别。

我已经看过使用UIPanGesture但是我在识别滑动时遇到了一些麻烦,并且在执行此操作时设置了手指跟踪器UIImageViews的坐标。我应该更多地尝试这个还是有不同的解决方案?

感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

UIImageView将接收和处理触摸,因此它们不会被转发到cocos2d OpenGL视图(也是UIView)。

要完成这项工作,您需要创建UIImageView的子类并覆盖每个touches ...方法并手动将事件转发到cocos2d的视图,这是touchesBegan的示例:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [[CCDirector sharedDirector].view touchesBegan:touches withEvent:event];
}

使用此UIImageView子类代替当前使用的原始子类。

这将使常规的cocos2d触摸事件起作用,如果你已经将这些事件添加到cocos2d的视图中,它还应该使UIGestureRecognizers按预期运行。

答案 1 :(得分:0)

如果我理解你需要什么(如果我错了请纠正我),你想在检测到拖动(平移)事件时移动一些UIViews,但是当用户触摸屏幕时你也会添加UIImageViews并且这会禁用接触。

您应该设置UIIMageView.userInteractionEnable = YES(默认情况下设置为NO),基本上每个应该检测到触摸的视图都应该有userInteractionEnable = YES

如果你想忽略某些子视图的一些触摸,你应该实现:     -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch的{​​{1}}方法。

要处理不同类型的手势,您应该实现以下方法:     UIGestureRecognizerDelegate