2016-08-14 57 views
1

在我第一個swift項目中,我在下載這個圖像的內容之後,通過向SubView添加一個新的UIImage而面臨一些問題。 它看起來像下載速度非常快,但應用程序需要另外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() 
     //... 
} 

的想法,爲什麼?

感謝您的支持。

回答

0

您不必從視圖中刪除UIImageView並將其添加回來。這花了很多時間。您應該用新的ImageView替換舊的圖像。您可以使用以下代碼。

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

當調用Web服務時,任務在主線程上執行,這就是爲什麼UI變爲凍結而沒有響應。爲了擺脫這個問題的調用主隊列和更新用戶界面是這樣的:

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 
})