2013-06-03 1 views
0

Я добавляю изображение в subviews scrollView, но только для определенного пользовательского класса AsyncImageView. Это занимает некоторое время, потому что есть много подзаголовков, и приложение потеряло плавную прокрутку.Поиск класса во многих подзаголовках. Есть ли способ лучше?

NSArray *subviewsArray = [[NSArray alloc] initWithArray:[scrollView subviews]]; 
     for (int j = 0; j < [subviewsArray count]; j++) { 
      for (AsyncImageView *checkView in [[subviewsArray objectAtIndex:j] subviews]) { 
       if ([checkView isKindOfClass:[AsyncImageView class]]) { 
         [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:checkView]; 

         NSString* urlTextEscaped = [[imageInfo objectAtIndex:0] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

         NSURL *URL = [NSURL URLWithString:urlTextEscaped]; 
         if (URL) 
         { 
          checkView.imageURL = URL; 
         } 
         else 
         { 
          NSURL *defaultURL = [NSURL URLWithString:@"http://www.domain.com/user_avatar_default.jpg"]; 
          checkView.imageURL = defaultURL; 

         } 
        } 
       } 
       } 

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

Это иерархия Scrollview

          scrollView 
               | 
               | 
              MaseterView 
               | 
               | 
         AsyncImageView - TitleView - OtherImageView 
+0

Сколько AsyncImageView СДЕЛАЕТ вам нужно поддерживать? Похоже, что вы должны хранить локальную ссылку как в прямом указателе, так и в массиве, если у вас более одного. –

+0

Есть много AsyncImageView. Я получаю объекты с url в ответе сервера, и для каждого изображения, которое нужно показать, я вызываю этот метод, в котором я отправляю массив 'imageInfo' с URL-адресом в качестве первого объекта. '[imageInfo objectAtIndex: 0]' – Spire

ответ

0

Вам не нужно, чтобы создать новый массив с подвидов в целях прокрутки, прежде чем перебирать его. У вас есть 2 общих варианта:

A. Все еще цикл, но не выполненный вами. Имеет смысл только в том случае, если у вас есть один вид изображения или несколько представлений изображений, которые вы хотите обновлять по отдельности.

Установите тег зрения изображения, а затем использовать [scrollView viewWithTag:...];

B. Если у вас есть несколько представлений изображения, и вы хотите, чтобы обновить все из них в то же время.

Удерживайте свойство изменяемого массива и добавьте его в изображение при его создании.

Другие вещи, чтобы думать о том:

  1. вам необходимо обновить все представления изображения Do - все они на дисплее?
  2. Можете ли вы наблюдать за прокруткой вида прокрутки и запускать только загрузки изображений, когда они отображаются (и отменять неполные нагрузки при прокрутке дисплея)?
+0

Мне понравился '[scrollView viewWithTag: ...];'. Я попробую и посмотрю, смогу ли я получить лучшую производительность. Thx – Spire

+0

Маршрут массива должен обеспечивать лучшую производительность, потому что это означает, что не требуется подчинение subviews. – Wain

0

Вы можете использовать

UIView *v = [self.containerView viewWithTag:uniqueTagvalue]; 

установить уникальное значение тега для представлений, которые нужны и принести его

+0

Хорошо, но как добавить изображение к этому представлению, когда я его получу. Должен ли я помещать все 'v' представления в массив (' vArray') и делать 'for (AsyncImageView * checkView в vArray)'? – Spire

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