![](/img/trans.png)
[英]UITapGestureRecognizer for UIImageView on UIScrollView never called iOS5
[英]UITapgesturerecognizer on uiimageview inside of uiscrollview
我遇到的一个问题是,我所做的轻击手势识别器仅适用于滚动视图中的最后一项。
我有一个图像数组,这些图像将被添加到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 *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];
嗯,这很有意义,因为您在所有图像视图中都添加了一个手势识别器。 当您将相同的手势识别器添加到第二个视图时,它将从上一个视图中删除。 您应该将一个手势识别器添加到滚动视图,然后根据触摸位置确定要轻按哪个图像视图,或者将单独的手势识别器添加到每个图像视图。
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
代替UIImageView
,然后您还将免费获得“突出显示的效果”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.