向SubView添加新的UIImage需要很长时间

时间:2016-08-14 10:37:28

标签: ios swift uiimageview uiimage

在我的第一个快速项目中,我通过在下载此图像的内容后向SubView添加新的UIImage来面临一些问题。 看起来下载速度非常快,但App需要另外5-15秒来更新视图。我不知道为什么。

这就是我所做的:

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()
        //...
}

一个想法为什么?

感谢您的支持。

2 个答案:

答案 0 :(得分:0)

您不必从视图中删除UIImageView并将其添加回来。这需要花费很多时间。您应该用新的图像替换imageView的旧图像。您可以使用以下代码。

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

答案 1 :(得分:0)

当调用Web服务时,任务在主线程上执行,这就是UI变为冻结而没有响应的原因。要摆脱这个问题,请调用主队列并更新UI,如下所示:

dispatch_async(dispatch_get_main_queue(), { 
  // update UI
 })

基本理念是

old.address:
id | country | city | street_address
1 | Ukraine | Kyiv | Bandery 26
2 | Poland | Warsaw | Kyrva 28

new.users:
id | name | address1 | address2
1 | Dohn | 1 | 2
2 | Kahn | 2 | 1