// // LoadingIndicatorImageView.swift // WOKA // // Created by MacBook Pro on 08/05/24. // import UIKit import SDWebImage extension UIImageView { func imageURL(_ url: String, color : UIColor = UIColor.black) { let activityIndicator = UIActivityIndicatorView(style: .medium) activityIndicator.tintColor = UIColor.darkGray activityIndicator.color = color activityIndicator.frame = CGRect(x: 0, y: 0, width: 64, height: 64) activityIndicator.hidesWhenStopped = true DispatchQueue.main.async { activityIndicator.startAnimating() } activityIndicator.translatesAutoresizingMaskIntoConstraints = true // activityIndicator.center = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 2) activityIndicator.center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)) // bottom is for resizing the indicator to be perfect in center activityIndicator.autoresizingMask = (UIView.AutoresizingMask(rawValue: UIView.AutoresizingMask.RawValue(UInt8(UIView.AutoresizingMask.flexibleRightMargin.rawValue) | UInt8(UIView.AutoresizingMask.flexibleLeftMargin.rawValue) | UInt8(UIView.AutoresizingMask.flexibleBottomMargin.rawValue) | UInt8(UIView.AutoresizingMask.flexibleTopMargin.rawValue)))) self.addSubview(activityIndicator) self.sd_setImage(with: URL(string: url.replacingOccurrences(of: " ", with: "%20"))) { (image, error, cacheType, url) in // activityIndicator.stopAnimating() DispatchQueue.main.async { activityIndicator.stopAnimating() // activityIndicator.removeFromSuperview() } } } } extension UIButton { func setImage(from url: String, for state: UIControl.State, color: UIColor = .black) { // Ensure the button's background is clear self.backgroundColor = .clear // Ensure the button's image view background is clear self.imageView?.backgroundColor = .clear let activityIndicator = UIActivityIndicatorView(style: .medium) activityIndicator.tintColor = .darkGray activityIndicator.color = color activityIndicator.frame = CGRect(x: 0, y: 0, width: 64, height: 64) activityIndicator.hidesWhenStopped = true DispatchQueue.main.async { activityIndicator.startAnimating() } activityIndicator.translatesAutoresizingMaskIntoConstraints = true activityIndicator.center = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 2) // Resizing the indicator to be perfectly centered activityIndicator.autoresizingMask = [ .flexibleRightMargin, .flexibleLeftMargin, .flexibleBottomMargin, .flexibleTopMargin ] self.addSubview(activityIndicator) // Setting the image using SDWebImage self.sd_setImage(with: URL(string: url.replacingOccurrences(of: " ", with: "%20")), for: state) { (image, error, cacheType, url) in DispatchQueue.main.async { activityIndicator.stopAnimating() activityIndicator.removeFromSuperview() } } } }