2012-05-20 3 views
0

У меня проблема с TTImagViews внутри UIScrollview. Я искал высокий и низкий, но coul'dnt действительно нашел решение. Интересно отметить, что жест выделения влияет на последнее TTImageview внутри scrollview. Например, у меня есть 10 изображений, которые пользователь может прокручивать, а жестов касания работает только на 10-м изображении на странице 2 или, скорее, на последнем изображении. Это мой код; какие-либо предложения?TTImageView внутри UIScrollview не получает штрихи

UIScrollView *imageScroll=[[UIScrollView alloc] initWithFrame:CGRectMake(70, postMessageLabel.frame.size.height+10, 250, 78)]; 
    [imageScroll setContentSize:CGSizeMake(70 * ([[images objectAtIndex:0]count])+10,64)];   
    int startAtX=5; 
    for(int i=0;i<[[images objectAtIndex:0]count];i++){ 
     if([[GlobalFunctions sharedGlobalFunctions] isValidURL:[[images objectAtIndex:0] objectAtIndex:i]]){ 
      TTImageView *imageView=[[TTImageView alloc] initWithFrame:CGRectMake(startAtX, 5, 64, 64)] ; 
      imageView.userInteractionEnabled=YES; 
      [imageView addGestureRecognizer:thumbnailTap];     
      imageView.urlPath=[[images objectAtIndex:0] objectAtIndex:i]; 
      imageView.autoresizesToImage=NO; 
      imageView.defaultImage=nil; 
      imageView.delegate=self;  
      [imageView setBackgroundColor:[UIColor blackColor]]; 
      [imageScroll addSubview:imageView]; 
      [imageView release]; 

     } 
      startAtX+=70;    
    } 

    [imageScroll setBounces:YES]; 
    [imageScroll setDelaysContentTouches:YES]; 
    [imageScroll setCanCancelContentTouches:NO]; 
    [self.view addSubview:imageScroll]; 
    [imageScroll release]; 

И да, водопроводная жест работает отлично, если есть только один ttimageview внутри UIScrollView. Я понятия не имею, почему!

ответ

0

Ну, кажется, что нет ничего плохого с моим кодом; Единственное различие заключается в том, как я прикрепляю распознаватель жестов. Хотя я исправил, я не уверен, почему это пошло не так. Вот что произошло

  1. Я объявил распознаватель жестов в своей viewdidload с типичным инициализацией alloc.
  2. Следовательно, я предположил, что распознаватель жестов доступен для просмотра. Я просто добавил его в цикл изображений.

Шаг 2; казалось, была проблема. Проблема исчезла, когда я объявил распознаватель жестов для каждого изображения и выпустил его после его назначения.

Технически для каждого изображения

---Create a gesture recognizer 
    |-Attach it to the TTImageView 
---Release the gesture recognizer 

Это решило проблему. Но мне все же любопытно, почему распознаватель жестов работает при назначении на один и изображение и терпит неудачу, когда я назначаю его нескольким изображениям.

Спасибо Абдулла за попытку, но ваше решение никуда не ушло.

0

Добавьте изображение в UIView, а затем добавьте жест выделения к этому UIView. Это сработало для меня, а также сработало для вас. Попробуйте следующее:

UIScrollView *imageScroll=[[UIScrollView alloc] initWithFrame:CGRectMake(70, postMessageLabel.frame.size.height+10, 250, 78)]; 
    [imageScroll setContentSize:CGSizeMake(70 * ([[images objectAtIndex:0]count])+10,64)];   
    int startAtX=5; 
    for(int i=0;i<[[images objectAtIndex:0]count];i++){ 
     if([[GlobalFunctions sharedGlobalFunctions] isValidURL:[[images objectAtIndex:0] objectAtIndex:i]]){ 
      TTImageView *imageView=[[TTImageView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)] ; 
      imageView.userInteractionEnabled=YES; 
      [imageView addGestureRecognizer:thumbnailTap];     
      imageView.urlPath=[[images objectAtIndex:0] objectAtIndex:i]; 
      imageView.autoresizesToImage=NO; 
      imageView.defaultImage=nil; 
      imageView.delegate=self;  
      [imageView setBackgroundColor:[UIColor blackColor]]; 

UIView *viewWithImg=[[UIView alloc] initWithFrame:CGRectMake(startAtX, 5, 64, 64)]; 
     [viewWithImg addSubview:imgView]; 
     viewWithImg.tag=i; 
     UITapGestureRecognizer *tapGesture2 = 
     [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured2:)];   
     tapGesture2.numberOfTapsRequired = 1; 
     tapGesture2.numberOfTouchesRequired=1; 
     [viewWithImg addGestureRecognizer:tapGesture2]; 

      [imageScroll addSubview: viewWithImg]; 
      [imageView release]; 

     } 
      startAtX+=70;    
    } 

    [imageScroll setBounces:YES]; 
    [imageScroll setDelaysContentTouches:YES]; 
    [imageScroll setCanCancelContentTouches:NO]; 
    [self.view addSubview:imageScroll]; 
    [imageScroll release]; 

и в методе singleTapGestureCaptured2

-(void)singleTapGestureCaptured2:(UITapGestureRecognizer *)gesture 
{ 
    NSLog(@"image tag or arr index from images array: %d",[[gesture view] tag]);  
} 
+0

HI abdullah, спасибо за ответ. Но я думаю, что вы не правильно прочитали мой вопрос. Мне нужна UIScrollview для прокрутки и TTImageview для загрузки async. – Veeru

+0

Я пытаюсь сказать: вы должны создавать UIView каждый раз, когда вы создаете imageView с кадром изображения, тогда вы должны добавить, что UIView для scrollview не является imageView, потому что imageView находится внутри UIView, и ваша загрузка async будет работать без каких-либо беда. –

+0

Привет, абдулла, я не видел никакой логики в решении; но я попробовал, имея uiview, добавляя ttimageview внутри uiview, а затем добавляя uiview в scrollview; все равно то же самое, ваше решение не сработало. – Veeru

Смежные вопросы