最后一个imageView点击了UIScrollView

时间:2013-09-09 00:33:38

标签: iphone ios objective-c

我使用以下代码将约29张图片添加到UIScrollView

- (void)setupHorizontalScrollView
{
 _scrollViewEffects.delegate = self;

[_scrollViewEffects setCanCancelContentTouches:NO];

_scrollViewEffects.clipsToBounds = NO;
_scrollViewEffects.scrollEnabled = YES;
_scrollViewEffects.pagingEnabled = YES;

NSUInteger nimages = 0;
NSInteger tot=0;
CGFloat cx = 0;
for (; ; nimages++) {
    NSString *imageName = [NSString stringWithFormat:@"e%d.png", nimages];
    UIImage *imageThumb = [UIImage imageNamed:imageName];

    [imageView setTag:nimages];

    if (tot==29) {
        break;
    }
    if (4==nimages) {
        nimages=0;
    }

    imageView = [[UIImageView alloc] initWithImage:imageThumb];



    UITapGestureRecognizer *singleTap =
    [[UITapGestureRecognizer alloc] initWithTarget:self
                                            action:@selector(handleSingleTap:)];
    singleTap.numberOfTapsRequired = 1;
    [imageView addGestureRecognizer:singleTap];

    CGRect rect = imageView.frame;
    rect.size.height = 50;
    rect.size.width = 50;
    rect.origin.x = cx;
    rect.origin.y = 0;
    imageView.layer.borderColor = [UIColor whiteColor].CGColor;
    imageView.layer.borderWidth = 1;
    imageView.frame = rect;

    [_scrollViewEffects addSubview:imageView];

    cx += imageView.frame.size.width+5;
    tot++;

}

//self.pageControl.numberOfPages = nimages;

[_scrollViewEffects setContentSize:CGSizeMake(cx, [_scrollViewEffects bounds].size.height)];

[imageView setUserInteractionEnabled:YES];



}

- (void)handleSingleTap:(UIGestureRecognizer *)sender
{
    NSLog(@"image tapped!!!");
}

正如您所看到的,UserInteraction已启用,一切正常,但代码仅检测来自UIScrollView的Last图像的点击。有什么问题?

2 个答案:

答案 0 :(得分:1)

移动线

[imageView setUserInteractionEnabled:YES];

进入循环。在循环完成后,您只在最后一个图像上设置用户交互。

答案 1 :(得分:0)

您只创建了1个imageView实例。要解决您的问题,您必须为eatch imageView创建一个新实例:

for (int a = 0; a < 5; a++) {
    UIIMageVIew *imgView = [[UIIMageView alloc] init];
    [self.view addSubview:imgView];
}

这将创建5个UIIMageView个实例。

这里的不同之处在于,新实例被添加了5次,并且在您的代码中,atm添加了相同的实例,因此当您添加它们时,它们将不会“存在”而只会是最后一个实例。

为了改善你的for循环设置,就像我在这里设置的那样,但是改为29,它会让你的代码更清晰,更短。