我正在创建自定义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正在点击并显示弹出窗口。
答案 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,获取其框架,并查看该抽头是否在该框架内。
现在您有一系列可能的图像 - 您可以弹出一个操作表(无论如何)并询问用户要显示的内容。