繁体   English   中英

uiscrollview内uiimageview上的UITapgesturerecognizer

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM