2016-08-14 11 views
1

私の最初の迅速なプロジェクトでは、この画像の内容をダウンロードした後に新しいUIImageをSubViewに追加することによっていくつかの問題に直面します。 ダウンロードがかなり速いようですが、アプリケーションを表示するには5〜15秒かかることがあります。私は理由を知りません。SubViewに新しいUIImageを追加すると非常に時間がかかります

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がフリーズして応答しなくなるのかがわかります。この問題を取り除くために、このようなメインキューと更新UIを呼び出す:基本的な考え方は

dispatch_async(dispatch_get_main_queue(), { 
    // update 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() 
     //... 
} 

関連する問題