我使用以下代码将约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图像的点击。有什么问题?
答案 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,它会让你的代码更清晰,更短。