2012-05-25 2 views
0

У меня есть IBAction, который устанавливает 49 изображений. Изображения устанавливаются только в конце метода, а не один за другим. Почему именно он это делает? Как бы я сделал изображения, установленные один за другим, а не все сразу в конце метода. Существует зависание в 1,4 секунды, а затем все изображения устанавливаются мгновенно.UIImages нарисовано методом возврата

+0

Наверное, потому что это не тривиальное действие (cpu wise) для загрузки 49 изображений. Дисплей не обновляется после каждого изменения. Когда вы вызываете свой метод, он будет загружать все данные до фактического обновления чего-либо. Вероятно, есть несколько способов, которыми вы можете поступить иначе, чтобы избежать этого эффекта. Первое, что приходит в голову, - загрузить изображение в фоновом режиме, затем установить его на основной поток, затем продолжить загрузку следующего в фоновом режиме и т. Д. Возможно, это не лучшее решение для вас, это зависит от того, что вы делаете. – Matt

ответ

0

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

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

dispatch_async(queue, ^{ 

    for (/* loop through my images */) 
    { 
     // do whatever you need to do to load image (e.g. create your UIImageView, myImageView) 

     // now submit it to the main queue to be displayed, in this case, adding it to the scrollview that I use to hold all of my image thumbnails 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.scrollView addSubview:myImageView]; 
     }); 
    } 

}); 

Примечания, добавления созданного UIImageView подается обратно в главную очередь, поскольку все обновления пользовательского интерфейса должно произойти на этой основную очереди.

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