2017-03-01 28 views
1

圖片下載之前,我想開始活動指標。如何運行活動指標直到下載圖片?

這裏是我的圖片下載功能,使用URL

extension UIImageView { 

func downloadImage(from url : String){ 

    let urlRequest = URLRequest(url: URL(string: url)!) 
    let task = URLSession.shared.dataTask(with: urlRequest){(data,response,error)in 

     if error != nil { 

      print("error...") 

     } 

     DispatchQueue.main.async { 
      self.image = UIImage(data:data!) 
     } 
    } 

    task.resume() 
} 

我的問題是如何才能做到這一點? (對不起我的英文不好)

+0

sd_webimages庫是下載圖像的最佳途徑。它也支持指標。 – Vahid

+0

謝謝。它是完美的工作! :D – SwiftyIso

+0

好吧,如果我的照片來到零,我想展現我自己的形象。 那麼我怎樣才能做到這一點與sd_webimages? – SwiftyIso

回答

1

你可以試試下面的辦法

extension UIImageView { 

    func downloadImage(from url : String){ 
    self.activityIndicator.startAnimating() 
    let urlRequest = URLRequest(url: URL(string: url)!) 
    let task = URLSession.shared.dataTask(with: urlRequest){(data,response,error)in 
     if error != nil { 
     DispatchQueue.main.async { 
      self.activityIndicator.stopAnimating() 
     } 
     print("error...") 
     } 
     else { 
     DispatchQueue.main.async { 
      self.activityIndicator.stopAnimating() 
      self.image = UIImage(data:data!) 
     } 
     } 
    } 
    task.resume() 
    } 

    fileprivate var activityIndicator: UIActivityIndicatorView { 
    get { 
     let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .white) 
     activityIndicator.hidesWhenStopped = true 
     activityIndicator.center = CGPoint(x:self.frame.width/2, 
            y: self.frame.height/2) 
     activityIndicator.stopAnimating() 
     self.addSubview(activityIndicator) 
     return activityIndicator 
    } 
    } 
} 
+2

它的工作,但它不停止= D我怎麼能阻止這個? – SwiftyIso

+0

它應該工作,當你提到不停,你可以更具體,有圖像顯示,但活動指標保持動畫? – ldindu

+0

這可能是因爲每次創建新活動時。 – Eldhose

2

您可以通過在你的方法封閉,這將下載的圖像

extension UIImageView { 

    func downloadImage(from url : String, completion: ((_ errorMessage: String?) -> Void)?){ 

    let urlRequest = URLRequest(url: URL(string: url)!) 
    let task = URLSession.shared.dataTask(with: urlRequest){ (data,response,error) in 

     if error != nil { 
     completion?("error...") 
     } 

     DispatchQueue.main.async { 
     self.image = UIImage(data:data!) 
     completion?(nil) 
     } 
    } 

    task.resume() 
    } 
} 

後,在你的ViewController執行

activityIndicator.startAnimating() 
imageView.downloadImage(from: "...") { (err) in 
    if err != nil { 
    // error handler 
    } 
    self.activityIndicator.stopAnimating() 
} 
0

這裏是我加載圖像的方式

if(activityList.banner != ""){ 
    dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), { 
    let fileManager = NSFileManager.defaultManager() 

    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 
    let pathSplit = activityList.banner.characters.split{$0 == "/"}.map(String.init) 
    let getImagePath = (paths as NSString).stringByAppendingPathComponent("\(pathSplit[pathSplit.count-1])") 
    if (fileManager.fileExistsAtPath(getImagePath)){ // if I already download the image before I opened from the folder 
     func display_image2(){ 
      activityImageView.image = UIImage(contentsOfFile: getImagePath) 
      activityImageView.image = activityImageView.image?.alpha(0.7) 
      activityIndicator.hidden = true 
      //iconImageView.hidden = true 
     } 
     dispatch_async(dispatch_get_main_queue(), display_image2) 
    }else{ //in another case I download the image from server 
     let url:String = "\(Constants().mainURL)/imagecache/activity_preview/" + activityList.banner 
     let imgURL: NSURL = NSURL(string: url)! 
     let request: NSURLRequest = NSURLRequest(URL: imgURL) 

     let session = NSURLSession.sharedSession() 
     let task = session.dataTaskWithRequest(request){ 
      (data, response, error) -> Void in 

      if (error == nil && data != nil){ 
       func display_image(){ 
        activityImageView.image = UIImage(data: data!) 

        if let data = UIImageJPEGRepresentation(UIImage(data: data!)!, 0.8) { 
         data.writeToFile(getImagePath, atomically: true) 
        } 
         activityIndicator.hidden = true 
        //iconImageView.hidden = true 
        activityImageView.image = activityImageView.image?.alpha(0.7) 

       } 
       dispatch_async(dispatch_get_main_queue(), display_image) 
      } 

     } 

     task.resume() 
    } 
    }) 
} 
相關問題