2017-03-01 7 views
1

イメージダウンロードの前に、私は活動表示を開始したいと思います。ここイメージをダウンロードするまでアクティビティインジケータを実行する方法は?

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

URLを使用すると、私の質問は、私はこれを行うことができる方法であるというのが私のイメージのダウンロード機能とは? (申し訳ありませんが私の英語の悪い)

+0

イメージをダウンロードするには、sd_webimagesライブラリが最適です。それはインジケータもサポートします。ありがとうございます。 – Vahid

+0

それは完全に動作しています! :D – SwiftyIso

+0

私の写真が無ければ、自分のイメージを見せたい。 どうすればsd_webimagesでこれを行うことができますか? – SwiftyIso

答えて

1

あなたがイメージ

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で実行されます、あなたの方法でクロージャを渡すことができ、次のアプローチ

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

を試すことができます

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

ここに画像をロードする方法は

0123です
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() 
    } 
    }) 
} 
関連する問題