Manos Chorianopoulos

fix cached images issue at gfy, mfy

...@@ -13,6 +13,24 @@ import UIKit ...@@ -13,6 +13,24 @@ import UIKit
13 @IBOutlet weak var newBadgeImage: UIImageView! 13 @IBOutlet weak var newBadgeImage: UIImageView!
14 @IBOutlet weak var campaignTitleLabel: UILabel! 14 @IBOutlet weak var campaignTitleLabel: UILabel!
15 15
16 + var postImageURL: String? {
17 + didSet {
18 + if let url = postImageURL {
19 + self.campaignImage.image = UIImage() // UIImage(named: "loading")
20 +
21 + UIImage.loadImageUsingCacheWithUrlString(url) { image in
22 + // set the image only when we are still displaying the content for the image we finished downloading
23 + if url == self.postImageURL {
24 + self.campaignImage.image = image
25 + }
26 + }
27 + }
28 + else {
29 + self.campaignImage.image = nil
30 + }
31 + }
32 + }
33 +
16 public override func awakeFromNib() { 34 public override func awakeFromNib() {
17 super.awakeFromNib() 35 super.awakeFromNib()
18 36
...@@ -43,7 +61,8 @@ import UIKit ...@@ -43,7 +61,8 @@ import UIKit
43 61
44 62
45 func configureCell(campaign: swiftApi.CampaignItemModel) { 63 func configureCell(campaign: swiftApi.CampaignItemModel) {
46 - campaignImage.load(link: campaign.logo_url ?? "", placeholder: UIImage(), cache: URLCache()) 64 + // campaignImage.load(link: campaign.logo_url ?? "", placeholder: UIImage(), cache: URLCache())
65 + self.postImageURL = campaign.logo_url ?? ""
47 66
48 campaignTitleLabel.text = campaign.title ?? "" 67 campaignTitleLabel.text = campaign.title ?? ""
49 68
...@@ -55,7 +74,8 @@ import UIKit ...@@ -55,7 +74,8 @@ import UIKit
55 } 74 }
56 75
57 func configureCell(ccms: swiftApi.LoyaltyContextualOfferModel) { 76 func configureCell(ccms: swiftApi.LoyaltyContextualOfferModel) {
58 - campaignImage.load(link: ccms._imageUrl , placeholder: UIImage(), cache: URLCache()) 77 + // campaignImage.load(link: ccms._imageUrl , placeholder: UIImage(), cache: URLCache())
78 + self.postImageURL = ccms._imageUrl
59 79
60 campaignTitleLabel.text = ccms._title 80 campaignTitleLabel.text = ccms._title
61 81
......
...@@ -16,6 +16,24 @@ import UIKit ...@@ -16,6 +16,24 @@ import UIKit
16 @IBOutlet weak var subtitleLabel: UILabel! 16 @IBOutlet weak var subtitleLabel: UILabel!
17 @IBOutlet weak var descriptionLabel: UILabel! 17 @IBOutlet weak var descriptionLabel: UILabel!
18 18
19 + var postImageURL: String? {
20 + didSet {
21 + if let url = postImageURL {
22 + self.campaignImage.image = UIImage() // UIImage(named: "loading")
23 +
24 + UIImage.loadImageUsingCacheWithUrlString(url) { image in
25 + // set the image only when we are still displaying the content for the image we finished downloading
26 + if url == self.postImageURL {
27 + self.campaignImage.image = image
28 + }
29 + }
30 + }
31 + else {
32 + self.campaignImage.image = nil
33 + }
34 + }
35 + }
36 +
19 public override func awakeFromNib() { 37 public override func awakeFromNib() {
20 super.awakeFromNib() 38 super.awakeFromNib()
21 39
...@@ -43,7 +61,8 @@ import UIKit ...@@ -43,7 +61,8 @@ import UIKit
43 61
44 62
45 func configureCell(campaign: swiftApi.CampaignItemModel) { 63 func configureCell(campaign: swiftApi.CampaignItemModel) {
46 - campaignImage.load(link: campaign.logo_url ?? "", placeholder: UIImage(), cache: URLCache()) 64 + // campaignImage.load(link: campaign.logo_url ?? "", placeholder: UIImage(), cache: URLCache())
65 + self.postImageURL = campaign.logo_url ?? ""
47 66
48 campaignTitleLabel.text = campaign.title ?? "" 67 campaignTitleLabel.text = campaign.title ?? ""
49 campaignTitleLabel.font = UIFont(name: "PFSquareSansPro-BoldItalic", size: 18) 68 campaignTitleLabel.font = UIFont(name: "PFSquareSansPro-BoldItalic", size: 18)
...@@ -60,7 +79,8 @@ import UIKit ...@@ -60,7 +79,8 @@ import UIKit
60 } 79 }
61 80
62 func configureCell(ccms: swiftApi.LoyaltyContextualOfferModel) { 81 func configureCell(ccms: swiftApi.LoyaltyContextualOfferModel) {
63 - campaignImage.load(link: ccms._imageUrl , placeholder: UIImage(), cache: URLCache()) 82 + // campaignImage.load(link: ccms._imageUrl , placeholder: UIImage(), cache: URLCache())
83 + self.postImageURL = ccms._imageUrl
64 84
65 campaignTitleLabel.text = ccms._title 85 campaignTitleLabel.text = ccms._title
66 campaignTitleLabel.font = UIFont(name: "PFSquareSansPro-BoldItalic", size: 18) 86 campaignTitleLabel.font = UIFont(name: "PFSquareSansPro-BoldItalic", size: 18)
......
...@@ -225,6 +225,33 @@ extension UIImageView { ...@@ -225,6 +225,33 @@ extension UIImageView {
225 } 225 }
226 } 226 }
227 227
228 +let imageCache = NSCache<NSString, AnyObject>()
229 +extension UIImage {
230 + static func loadImageUsingCacheWithUrlString(_ urlString: String, completion: @escaping (UIImage) -> Void) {
231 + if let cachedImage = imageCache.object(forKey: urlString as NSString) as? UIImage {
232 + completion(cachedImage)
233 +
234 + } else {
235 + //No cache, so create new one and set image
236 + let url = URL(string: urlString)
237 + URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
238 + if let error = error {
239 + print(error)
240 + return
241 + }
242 +
243 + DispatchQueue.main.async(execute: {
244 + if let downloadedImage = UIImage(data: data!) {
245 + imageCache.setObject(downloadedImage, forKey: urlString as NSString)
246 + completion(downloadedImage)
247 + }
248 + })
249 +
250 + }).resume()
251 + }
252 + }
253 +}
254 +
228 typealias GradientPoints = (startPoint: CGPoint, endPoint: CGPoint) 255 typealias GradientPoints = (startPoint: CGPoint, endPoint: CGPoint)
229 256
230 enum GradientOrientation { 257 enum GradientOrientation {
......