uiscrollview 内的 uiimageview 上的 UITapgesturerecognizer
Posted
技术标签:
【中文标题】uiscrollview 内的 uiimageview 上的 UITapgesturerecognizer【英文标题】:UITapgesturerecognizer on uiimageview inside of uiscrollview 【发布时间】:2014-03-08 08:31:16 【问题描述】:我有一个问题,我制作的点击手势识别器仅适用于滚动视图中的最后一项。
我有一组图像被添加到 UIImageView 中,并且 UIImageView 正在以下代码中添加到 ScrollView:
UIImageView *imageView1;
for (int i = 0; i < numberOfViews; i++)
xOrigin = i * imageSize;
imageView1 = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin,50,100,50)];
[imageView1 setUserInteractionEnabled:YES];
[imageView1 addGestureRecognizer:tap]; // The gesture I want
[imageView1 setImage:[images objectAtIndex:i]];
[scrollView addSubview:imageView1];
// Set the contentSize equal to the size of the UIImageView
// scrollView.contentSize = imageView.scrollview.size;
scrollView.contentSize = CGSizeMake(numberOfViews * imageSize, imageSize);
// Finally, add the UIScrollView to the controller's view
[self.view addSubview:scrollView];
上面的代码可以正常工作,以将图像按顺序添加到滚动视图中,以及将点击添加到列表中的最后一项。也就是说,其余的都没有得到点击动作?
提前致谢。
【问题讨论】:
您好,如果我的回答对您有帮助,请将其标记为已接受。谢谢 这个问题帮助我解决了一个单独的问题 - 记得在 UIImageView 上设置用户交互启用! 【参考方案1】:我可以看到你只有一个点击手势对象,这就是为什么当你运行循环时,它只被添加到最后一个图像视图中。
您需要为一个图像视图创建一个点击手势对象。
UIImageView *imageView1;
for (int i = 0; i < numberOfViews; i++)
xOrigin = i * imageSize;
imageView1 = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin,50,100,50)];
[imageView1 setUserInteractionEnabled:YES];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapMethod:)];
[imageView1 addGestureRecognizer:tap]; // The gesture I want
[imageView1 setImage:[images objectAtIndex:i]];
[scrollView addSubview:imageView1];
// Set the contentSize equal to the size of the UIImageView
// scrollView.contentSize = imageView.scrollview.size;
scrollView.contentSize = CGSizeMake(numberOfViews * imageSize, imageSize);
// Finally, add the UIScrollView to the controller's view
[self.view addSubview:scrollView];
【讨论】:
【参考方案2】:嗯,这是有道理的,因为您向所有图像视图添加了一个手势识别器。当您将相同的手势识别器添加到第二个视图时,它会从前一个视图中删除。您应该向滚动视图添加一个手势识别器,然后根据触摸位置确定点击了哪个图像视图,或者为每个图像视图添加单独的手势识别器。
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
UIGestureRecognizer *tapGestureRecongnizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[scrollView addGestureRecognizer:tapGestureRecongnizer];
- (void)handleTap:(UIGestureRecognizer *)tapGestureRecognizer
CGPoint location = [tapGestureRecognizer locationInView:self.scrollView];
for (UIImageView *imageView in self.imageViews)
if (CGRectContainsPoint(imageView.frame, location))
// here is the imageView being tapped
另一种方法是使用UIButton
s 而不是UIImageView
s,那么您还可以免费获得“高亮效果”。
【讨论】:
我该如何解决这个问题?以上是关于uiscrollview 内的 uiimageview 上的 UITapgesturerecognizer的主要内容,如果未能解决你的问题,请参考以下文章
在 UIScrollView 中放大多个 UIImageView
如果我隐藏 NavigationBar 和 ToolBar,UIScrollView 会向上移动