jonasalbert
1/22/2018 - 8:00 AM

Image with AlamofireImage

Image with AlamofireImage

//
//  UIImageExt.swift
//  FeedSample
//
//  Created by JONAS on 15/01/2018.
//  Copyright © 2018 Mynd. All rights reserved.
//
//  Prerequisites:
//  1. import UIKit, AlamofireImage & KYCircularProgress
//

import UIKit
import AlamofireImage
import KYCircularProgress

extension UIImageView {
 
  func ex_setImage(urlString: String) {
    
    let status: KYCircularProgress = configureCircularProgress
    
    let imgManager = ImageViewManager.instance
    if let imgCached = imgManager.imageCache.image(withIdentifier: urlString) {
      self.image = imgCached
      status.isHidden = true
    } else {
      self.af_setImage(withURL: URL(string:urlString)!
        , placeholderImage: nil
        , filter: nil
        , progress: { (progress) in
          status.progress = progress.fractionCompleted
      }, progressQueue: DispatchQueue.main
        , imageTransition: UIImageView.ImageTransition.crossDissolve(0.5)
        , runImageTransitionIfCached: true
        , completion: { (response) in
          guard let img = response.result.value else { return }
          self.image = img
          imgManager.imageCache.add(img, withIdentifier: urlString)
      })
    }
    
  }
  
  internal var configureCircularProgress: KYCircularProgress {
    let cgreact = CGRect(x: 5.0, y: 5.0, width: 40.0, height: 40.0)
    let statusProgress = KYCircularProgress(frame: cgreact)
    statusProgress.isHidden = false
    statusProgress.colors = [UIColor(rgba: 0xA6E39D11), UIColor(rgba: 0xAEC1E355), UIColor(rgba: 0xAEC1E3AA), UIColor(rgba: 0xF3C0ABFF)]
    statusProgress.guideLineWidth = 1.0
    statusProgress.showGuide = true
    statusProgress.lineCap = kCALineCapRound
    statusProgress.progress = 0.001
    statusProgress.progressChanged { (progress, circularProgress) in
      print("^^^^^ progress: \(progress)")
      circularProgress.isHidden = progress == 1.0
    }
    self.addSubview(statusProgress)
    return statusProgress
  }
  
}
 

class ImageViewManager {
  
  public static var instance = ImageViewManager()
  
  public let imageCache = AutoPurgingImageCache(
    memoryCapacity: UInt64(100).megabytes(),
    preferredMemoryUsageAfterPurge: UInt64(60).megabytes()
  )
  
}