6

我正在制作一个应用程序,其中有一个背景视图,并且有六个UIImageView作为子视图。我UITapGestureRecognizer要看看什么时候轻按其中一个UIImageViews 并且下面的 handleTap 方法是手势识别器调用的方法。但是,当我运行它时,hitTest:withEvent:即使我点击其中一个 imageViews,它也总是返回背景视图。当我调用hitTest时,它与事件有关吗?

谢谢

- (void) handleTap: (UITapGestureRecognizer *) sender
{
    if (sender.state == UIGestureRecognizerStateEnded)
    {
        CGPoint location = [sender locationInView: sender.view];
        UIView * viewHit = [sender.view hitTest:location withEvent:NULL];
        NSLog(@"%@", [viewHit class]);
        if (viewHit == sender.view) {}
        else if ([viewHit isKindOfClass:[UIImageView class]])
        {
            [self imageViewTapped: viewHit];
            NSLog(@"ImageViewTapped!");
        }
    }
}
4

2 回答 2

12

UIImageView 默认配置为不注册用户交互。

从 UIImageView 文档:

新的图像视图对象默认配置为忽略用户事件。如果要在 UIImageView 的自定义子类中处理事件,则必须在初始化对象后将 userInteractionEnabled 属性的值显式更改为 YES。

所以,在你初始化你的视图之后,你应该有:

view.userInteractionEnabled = YES;

这将重新打开交互,您应该能够注册触摸事件。

于 2012-04-22T21:21:30.653 回答
1

对您的方法(包含视图上的单个 GR)进行了重写,但它会让我们的大脑受伤,让坐标系正确,这绝对是发布代码中的问题。

更好的答案是将 N 个手势识别器附加到每个 UIImageViews。它们都可以具有相同的目标并使用相同的 handleTap: 方法。handleTap: 可以在不搜索任何几何图形的情况下获取视图,如下所示:

UIImageView *viewHit = (UIImageView *)sender.view;
于 2012-04-22T21:13:02.707 回答