1

我在那个 ImageView 中有一个 ImageView 我显示了一些图像,但是当我在该图像上点击 2 次时,我不会得到正确的事件。

这个方法没有被调用。

- (void)doubleTapWebView:(UITapGestureRecognizer *)gesture
{
    NSLog(@"double-tap");
    // nothing to do here
}

我试过这段代码:

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapWebView:)];
    doubleTap.numberOfTapsRequired = 2;
    doubleTap.delegate = self;
    [self.ImgView addGestureRecognizer:doubleTap];


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

这是其余的代码:

UIScrollView *scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];

    [scrollView setPagingEnabled:YES];

    [scrollView setShowsHorizontalScrollIndicator:NO];

    FrontsCards=[[NSMutableArray alloc]initWithObjects:@"cloub1.png",@"cloub2.png",@"cloub3.png",@"cloub4.png", nil];

    for(int m=0; m< [FrontsCards count];m++)
    {

    //  int randIdx=arc4random()%[FrontsCards count];

        NSString *imageName=[FrontsCards objectAtIndex:m];

        NSString *fullImageName=[NSString stringWithFormat:@"%@",imageName];

        int padding=25;
        // padding is given.

        CGRect imageViewFrame=CGRectMake(scrollView.frame.size.width*m+padding, scrollView.frame.origin.y, scrollView.frame.size.width-2*padding, scrollView.frame.size.height);

        ImgView=[[UIImageView alloc]initWithFrame:imageViewFrame];

        [ImgView setImage:[UIImage imageNamed:fullImageName]];

        [ImgView setContentMode:UIViewContentModeScaleAspectFill];

        [scrollView addSubview:ImgView];
    }

    CGSize scrollViewSize=CGSizeMake(scrollView.frame.size.width*[FrontsCards count], scrollView.frame.size.height);

    [scrollView setContentSize:scrollViewSize];

    [self.view addSubview:scrollView];
4

3 回答 3

2

默认情况下 imageview userInteraction 为 false,因此您可以添加这行代码。

self.ImgView.userInteractionEnabled=YES;

并添加UIGestureRecognizerDelegate.h 文件

于 2013-05-14T04:44:03.137 回答
2

默认情况下,图像的用户交互是NO. 所以做吧YES

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapWebView:)];
    doubleTap.numberOfTapsRequired = 2;
    doubleTap.delegate = self;
    [self.ImgView addGestureRecognizer:doubleTap];
self.ImgView.userInteractionEnabled=YES;
于 2013-05-14T04:47:12.823 回答
1

在您的循环中,您将四个图像视图中的每一个分配给同一个实例变量 ( ImgView)。

在循环结束时,ImgView将只指向最后一个,所以这是手势识别器被添加到的那个。如果您想响应每个图像视图上的双击事件,您必须为每个图像视图添加一个单独的手势识别器。最简单的方法是在循环中添加识别器。

此外,正如其他人已经指出的那样,您需要设置userInteractionEnabledYES手势识别器才能处理图像视图。

顺便说一句,当您迭代数组(或一般的集合)的元素时,不需要计数器变量,只需使用for (NSString *imageName in FrontCards) { ... }. 该变量的名称应该是frontCards; 大写名称通常保留给类名。

于 2013-05-14T05:09:56.517 回答