2016-08-14 5 views
1

В моем первом стремительном проекте я сталкиваюсь с некоторыми проблемами, добавив новый UIImage в SubView после загрузки содержимого этого изображения. Похоже, загрузка выполняется довольно быстро, но для обновления представления требуется еще 5-15 секунд. Я понятия не имею, почему.Добавление нового UIImage в SubView занимает очень много времени

Вот что я сделал:

override func viewDidLoad() { 
    super.viewDidLoad() 
    //... 
    loadPic(PrevPic) 
} 

func loadPic(prevImage: UIImageView){ 

     //... get URL; result in object["data"] 

         let fileUrl = NSURL(string: object["data"] as! String) 
         let session = NSURLSession.sharedSession() 
         let request = NSMutableURLRequest(URL: fileUrl!) 
         let task = session.dataTaskWithRequest(request){ 
          (data, response, error) -> Void in 
          if error != nil { 
           print(error!.localizedDescription) 
          } else { 
           var imagePic: UIImageView? 
           let imageData = NSData(data: data!) 

           prevImage.removeFromSuperview() 
           let image: UIImage = UIImage(data: imageData)! 
           imagePic = UIImageView(image: image) 
           imagePic?.contentMode = .ScaleAspectFit 
           self.view.addSubview(imagePic!) 

           //... alignment 

          } 
         } 
         task.resume() 
     //... 
} 

An идеи почему?

Спасибо за поддержку.

ответ

0

Вам не нужно удалять UIImageView с вашего вида и добавлять его обратно. Это занимает много времени. Вы должны заменить старое изображение imageView на новое. Вы можете использовать следующий код.

if let newImage = UIImage(data: imageData){ 
imageView.image = newImage 
} 
0

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

func loadPic(prevImage: UIImageView){ 

     //... get URL; result in object["data"] 

         let fileUrl = NSURL(string: object["data"] as! String) 
         let session = NSURLSession.sharedSession() 
         let request = NSMutableURLRequest(URL: fileUrl!) 
         let task = session.dataTaskWithRequest(request){ 
          (data, response, error) -> Void in 
          if error != nil { 
           print(error!.localizedDescription) 
          } else { 
           var imagePic: UIImageView? 
           let imageData = NSData(data: data!) 
           dispatch_async(dispatch_get_main_queue(), { 
           prevImage.removeFromSuperview() 
           let image: UIImage = UIImage(data: imageData)! 
           imagePic = UIImageView(image: image) 
           imagePic?.contentMode = .ScaleAspectFit 
           self.view.addSubview(imagePic!) 

           //... alignment 
           }) 


          } 
         } 
         task.resume() 
     //... 
} 

Основная идея

dispatch_async(dispatch_get_main_queue(), { 
    // update UI 
}) 
Смежные вопросы