需要知道哪些自定义UIViews在点击

时间:2012-09-11 20:06:00

标签: objective-c ios uigesturerecognizer

我正在创建自定义UIImageViews并放置在UIScrollView中的UIImageView上。当用户点击自定义UIImageView时,它会显示一个弹出窗口。

我可能遇到的问题是两个自定义UIImageViews是否重叠。我需要问用户他想要哪一个。

如何判断哪些自定义UIImageViews在点按?如果检测到点击,我需要每个视图返回自己。如果多于一个视图返回,那么我可以询问用户他想要哪一个。

每个自定义UIImageView都创建了一个UITapGestureRecognizer:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(select)];
singleTap.numberOfTapsRequired = 1;
singleTap.delegate = self;

[self addGestureRecognizer:singleTap];

现在,只有最顶级的自定义UIImageView正在点击并显示弹出窗口。

2 个答案:

答案 0 :(得分:2)

我不确定你是如何计划识别哪个图像的,但是在这个例子中我使用了标签。以下内容将在滚动视图中接收触摸的位置,并将该点与滚动视图子视图中的图像视图的帧进行比较。然后它将添加与可变数组匹配的图像的标记。

注意:如果在解除警报时没有清空此数组,则会不断向其中添加新对象。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView:myScrollView];

    for (UIImageView *myImageView in myScrollView.subviews) {
        if (CGRectContainsPoint(myImageView.frame, location)) {
            [someMutableArray addObject:[NSNumber numberWithInteger:myImageView.tag]];
        }
    }
}

答案 1 :(得分:1)

我假设您的问题是视图是透明的,因此用户可以看到实际上存在重叠,并且可能会故意挖掘重叠区域。

无论如何,在这种情况下您需要做的是获取点按的位置:

[tapGesture locationInView:scrollView]

然后遍历scrollView的subView数组,获取每个UIImageView,获取其框架,并查看该抽头是否在该框架内。

现在您有一系列可能的图像 - 您可以弹出一个操作表(无论如何)并询问用户要显示的内容。