2013-09-09 4 views
0

Я использую следующий код, чтобы добавить около 29 изображений в UIScrollView.Last imageView tapped 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. Что не так?

ответ

1

Переместить линию

[imageView setUserInteractionEnabled:YES]; 

быть внутри цикла. Вы устанавливаете взаимодействие с пользователем только на последнем изображении после завершения цикла.

+0

Это потрясающе. Большое спасибо. Скажите, пожалуйста, как я могу проверить, какое изображение было затронуто? Как вы видели в моем коде, я пытался добавить теги к каждому изображению внутри цикла, но я понятия не имею, как проверить. Я попытался: if (imageView.tag == 1) {NSLog (@ "tag 1"), но не работает –

+0

Когда handleSingleTap: срабатывает, распознаватель жеста передается в параметре. У распознавателя жестов есть свойство view, которое является видом, к которому он был прикреплен. – danh

0

Вы создаете только 1 экземпляр изображения. Для того, чтобы решить вашу проблему, вы должны создать новый экземпляр для eatch ImageView:

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

Это создаст 5 UIIMageView экземпляров.

Разница заключается в том, что новый экземпляр добавляется 5 раз, и в вашем коде atm добавляется один и тот же экземпляр, поэтому, добавляя их, они не будут «существовать», а только последний.

И чтобы улучшить вашу петлю, настройте ее так, как я сделал здесь, но вместо этого поставьте 29, это сделает ваш код более чистым и коротким.

+0

Что вы говорите, что OP создает только 1 экземпляр imageView? В коде довольно много проблем, но это не один из них. Атрибут находится внутри цикла. – danh

+0

У него есть глобальное изображение, и я думал, что из-за этого он не создаст новый экземпляр. – Arbitur