单个视图的多个手势响应器

时间:2012-01-05 17:29:07

标签: ios cocoa-touch uigesturerecognizer uitapgesturerecognizer

我有一个图像,我想设置为响应几个不同的手势响应者。因此,例如,如果图片的一部分被触摸,我想要调用一个选择器,而另一个选择器用于图片的不同部分。

我查看了UIGestureRecognizerUITapGestureRecognizer类,但我找不到指定要与之关联的图像区域的方法。这在iOS中是否可行?如果是的话,我应该考虑使用什么类?

2 个答案:

答案 0 :(得分:3)

最简单的解决方案是在图像上放置不可见的视图,并在其上放置手势识别器。

如果这不可行,你将不得不在手势识别器的点击处理程序中查看locationInView,并根据用户点击的位置找出你想要做的事情。

答案 1 :(得分:2)

使用locationInView:属性确定点击发生的位置,然后有条件地调用方法。您可以通过设置与您的匹配区域对应的一些CGRect来执行此操作。然后使用CGRectContainsPoint()函数确定点击是否落在其中一个命中区域。

您的点击手势识别器操作可能如下所示:

- (void)tapGestureRecognized:(UIGestureRecognizer *)recognizer
{
    // Specify some CGRects that will be hit areas
    CGRect firstHitArea = CGRectMake(10.0f, 10.0f, 44.0f, 44.0f);
    CGRect secondHitArea = CGRectMake(64.0f, 10.0f, 44.0f, 44.0f)

    // Get the location of the touch in the view's coordinate space
    CGPoint touchLocation = [recognizer locationInView:recognizer.view];

    if (CGRectContainsPoint(firstHitArea, touchLocation))
    {
        [self firstMethod];
    }
    else if (CGRectContainsPoint(secondHitArea, touchLocation))
    {
        [self secondMethod];
    }
}