0

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

这些视图将跟随手指,他们这样做,但问题是我相信他们正在吞咽触摸,不允许手势被识别。我试过了:

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

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

我已经研究过使用,UIPanGesture但在识别滑动以及设置UIImageViews手指跟踪器的坐标时遇到了一些问题。我应该更多地尝试这个还是有不同的解决方案?

任何帮助表示赞赏!

4

2 回答 2

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 的行为符合预期。

于 2013-04-24T21:04:32.310 回答
0

如果我理解您的需求(如果我错了,请纠正我),您希望在检测到拖动(平移)事件时移动一些 UIView,但是当用户触摸屏幕并且这会禁用触摸时,您还需要添加 UIImageView。

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

如果你想忽略对某些子视图的一些改动,你应该实现: -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touchmethod of UIGestureRecognizerDelegate.

要处理不同类型的手势,您应该实现以下方法: -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; }

于 2013-04-24T22:39:59.383 回答