2016-08-14 3 views
1

첫 번째 신속한 프로젝트에서이 이미지의 내용을 다운로드 한 후 SubView에 새로운 UIImage를 추가하여 몇 가지 문제에 직면했습니다. 다운로드가 꽤 빠르지 만 앱이보기를 업데이트하는 데 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

웹 서비스를 호출하면 작업이 메인 스레드에서 실행되며 그 이유는 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 
}) 
입니다 :이 문제를 제거하려면 주요 큐 및 업데이트이 같은 UI를 호출
관련 문제