2015-08-17 4 views
0

У меня есть два UIImageView объектов на мой взгляд, хранящегося в массиве с именем imgViews, и я пытаюсь загрузить изображения для них асинхронно с этим кодом:Скачивали фотография занимает очень много времени, чтобы показать на UIImageView

func showPic(positionIndex: Int){ 
    let urlStr = "https://www.friendesque.com/arranged/userpics/amir/1" 
    let url = NSURL(string: urlStr) 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in 

     if error == nil { 
      self.imgViews[positionIndex].image = UIImage(data: data) 
      //self.imgViews[positionIndex].image = UIImage(named: "11665489_10154101221228009_2542754962143804380_n.jpg") 
      print("Loading Done...") 

     } 
     else{ 
      print(error) 
     } 
    }) 
     task.resume() 
} 

и внутри моего viewDidLoad(), у меня есть

showPic(0) 

Когда я запускаю код, я вижу "Loading Done..." сразу это означает, что картина была загружена, но это занимает очень много времени (около 1 мин) для UIImageView вctually измените на загруженное изображение. Это очень маленькая картинка (~ 15K), и это не может быть проблемой времени обработки.

Я попытался загрузить изображение ресурса (часть комментария кода) вместо загруженного изображения, но он все еще медленный.

Я действительно смущен. Почему так медленно работает при работе с изображениями внутри блока?

ответ

1

Возможно, когда задача данных вернется на фоновый поток? Вам нужно будет переключиться на основной поток, чтобы изменить UIImageView. Несмотря на это, для достижения этой цели я бы использовал категорию UIImageView + AFNetworking. Он прост, хорошо протестирован и позволяет вам отображать изображение заполнителя во время его загрузки.

https://github.com/AFNetworking/AFNetworking/blob/master/UIKit%2BAFNetworking/UIImageView%2BAFNetworking.h

использовать:

myImageView.setImageWithURL(url!)

+0

О, это хорошее объяснение. Никогда не думал о необходимости переключиться на основную нить. Спасибо. Является ли метод, предложенный вами асинхронным? – friendq

+0

@friendq Да, это асинхронный –

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