From 1cdfb77f417b88aab740e088876cc95db585cbe5 Mon Sep 17 00:00:00 2001 From: Stanislav Buldakov Date: Wed, 4 Oct 2017 17:02:04 +0400 Subject: [PATCH] Add UIActivityIndicator --- Distrib/MoaDistrib.swift | 30 ++++++++++++++++++++++++++++-- Moa/ImageView+moa.swift | 21 ++++++++++++++++++++- Moa/Moa.swift | 9 ++++++++- 3 files changed, 56 insertions(+), 4 deletions(-) diff --git a/Distrib/MoaDistrib.swift b/Distrib/MoaDistrib.swift index f4bcb6e..0344bb3 100644 --- a/Distrib/MoaDistrib.swift +++ b/Distrib/MoaDistrib.swift @@ -350,7 +350,7 @@ public struct MoaHttpSession { import Foundation private var xoAssociationKey: UInt8 = 0 - +private var xo1AssociationKey: UInt8 = 1 /** Image view extension for downloading images. @@ -374,6 +374,25 @@ public extension MoaImageView { imageView.moa.url = "http://site.com/image.jpg" */ + + public var activityIndicator: UIActivityIndicatorView { + get { + if let value = objc_getAssociatedObject(self, &xo1AssociationKey) as? UIActivityIndicatorView { + return value + } else { + let activity = UIActivityIndicatorView.init(frame: CGRect.init(x: 0, y: 0, width: 30, height: 30)); + activity.tintColor = UIColor.lightGray + activity.center = self.center; + objc_setAssociatedObject(self, &xo1AssociationKey, activity, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN) + return activity + } + } + + set { + objc_setAssociatedObject(self, &xoAssociationKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN) + } + } + public var moa: Moa { get { if let value = objc_getAssociatedObject(self, &xoAssociationKey) as? Moa { @@ -596,6 +615,10 @@ public final class Moa { init(imageView: MoaImageView) { self.imageView = imageView + self.imageView?.image = nil; + self.imageView?.activityIndicator.frame = CGRect.init(x: 0, y: 0, width: (self.imageView?.frame.size.width)!, height: (self.imageView?.frame.size.height)!); + self.imageView?.addSubview((self.imageView?.activityIndicator)!); + self.imageView?.activityIndicator.startAnimating(); } /** @@ -771,7 +794,8 @@ public final class Moa { } imageView?.image = imageForView - } + imageView?.activityIndicator.stopAnimating(); + imageView?.activityIndicator.removeFromSuperview(); } /** @@ -792,6 +816,8 @@ public final class Moa { if let onError = onError { DispatchQueue.main.async { onError(error, response) + self.imageView?.activityIndicator.stopAnimating(); + self.imageView?.activityIndicator.removeFromSuperview(); } } } diff --git a/Moa/ImageView+moa.swift b/Moa/ImageView+moa.swift index 1bc9a6f..51d5368 100644 --- a/Moa/ImageView+moa.swift +++ b/Moa/ImageView+moa.swift @@ -1,7 +1,7 @@ import Foundation private var xoAssociationKey: UInt8 = 0 - +private var xo1AssociationKey: UInt8 = 1 /** Image view extension for downloading images. @@ -25,6 +25,25 @@ public extension MoaImageView { imageView.moa.url = "http://site.com/image.jpg" */ + + public var activityIndicator: UIActivityIndicatorView { + get { + if let value = objc_getAssociatedObject(self, &xo1AssociationKey) as? UIActivityIndicatorView { + return value + } else { + let activity = UIActivityIndicatorView.init(frame: CGRect.init(x: 0, y: 0, width: 30, height: 30)); + activity.tintColor = UIColor.lightGray + activity.center = self.center; + objc_setAssociatedObject(self, &xo1AssociationKey, activity, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN) + return activity + } + } + + set { + objc_setAssociatedObject(self, &xoAssociationKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN) + } + } + public var moa: Moa { get { if let value = objc_getAssociatedObject(self, &xoAssociationKey) as? Moa { diff --git a/Moa/Moa.swift b/Moa/Moa.swift index d5eca4b..313de55 100644 --- a/Moa/Moa.swift +++ b/Moa/Moa.swift @@ -59,6 +59,10 @@ public final class Moa { init(imageView: MoaImageView) { self.imageView = imageView + self.imageView?.image = nil; + self.imageView?.activityIndicator.frame = CGRect.init(x: 0, y: 0, width: (self.imageView?.frame.size.width)!, height: (self.imageView?.frame.size.height)!); + self.imageView?.addSubview((self.imageView?.activityIndicator)!); + self.imageView?.activityIndicator.startAnimating(); } /** @@ -234,7 +238,8 @@ public final class Moa { } imageView?.image = imageForView - } + imageView?.activityIndicator.stopAnimating(); + imageView?.activityIndicator.removeFromSuperview(); } /** @@ -255,6 +260,8 @@ public final class Moa { if let onError = onError { DispatchQueue.main.async { onError(error, response) + self.imageView?.activityIndicator.stopAnimating(); + self.imageView?.activityIndicator.removeFromSuperview(); } } }