1

我目前正在实现一个益智游戏,玩家必须在框架上拖放图像。我已将 UIPanGestureRecognizer 附加到拼图的每个部分,并且效果很好。但是,我遇到了“L”形部件的问题。该块的空白区域正在“阻止”手势识别,并阻止底部的块接收事件。

例如,“x”是我的“L”形块,我不能触摸“a”:

xxx
xa

我已经尝试了几件事,例如定义shouldReceiveTouch委托,以便在触摸“L”的空白区域时返回 no,但它不会将触摸传递给下面的视图。

我也定义panRecognizer.cancelsTouchesInView = NO;了,但这也不起作用。

我正在考虑使用 nextresponder,但 UIGestures 似乎不可能。

如果有人有其他想法,那真的很有帮助。谢谢。

4

3 回答 3

3

这似乎是一份工作-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event。编写一个UIView( MyLView) 的子类,它会覆盖此方法并YES在触摸位于实际“L”内时返回。

因此,如果您的视图是 90. x 120. 并且“L”是 30. 宽,如下所示:

x00
x00
x00
xxx 

您的实现可能如下所示:

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
  return point.x < 30. || point.y > 90.; 
}

从未对此进行过测试,但这就是它从苹果文档中读取的方式。

于 2012-08-22T15:50:35.493 回答
0

默认情况下,如果子视图无法响应触摸,它将通过响应者链,在这种情况下,这意味着超级视图,因此我建议将较小的视图子视图设置为超级视图,这样手势就不会“阻塞”你需要。

于 2012-08-22T14:34:27.423 回答
0

不确定这是否对您的场景有所帮助,但如果您希望上视图忽略任何用户输入(触摸事件),那么您可以调用:

self.pieceX.userInteractionEnabled = NO;

当然你也可以在对应的 UIGestureRecognizer 委托方法中切换这个状态。

于 2015-04-11T22:56:25.937 回答