I have created this custom code to create a loader in my project. The problem is that I have to copy and paste this function in all my classes. Is there any way I can declare this code in one global functions class and just use them wherever I want to use by calling.
import NVActivityIndicatorView
let activityIndicatorView = NVActivityIndicatorView(frame: CGRect(x: 80, y: 80, width: 60, height:60), type: .ballTrianglePath, color: .black)
let blurView = UIView()
func startLoader(){
DispatchQueue.main.async
{
self.blurView.isHidden = false
self.blurView.frame = self.view.frame
self.blurView.backgroundColor = UIColor.gray.withAlphaComponent(0.5)
self.view.addSubview(self.blurView)
self.activityIndicatorView.center = self.blurView.center
self.view.addSubview(self.activityIndicatorView)
self.activityIndicatorView.startAnimating()
}
}
func stopLoader(){
DispatchQueue.main.async {
self.activityIndicatorView.stopAnimating()
self.blurView.isHidden = true
}
}
First Create function to get activityIndicatorView and blurView. Because you don't need to repeat code in everywhere.And easily change entire loader views in one place
Class Helper {
static func getLoaderViews()->(UIView,NVActivityIndicatorView){
let activityIndicatorView = NVActivityIndicatorView(frame: CGRect(x: 80, y: 80, width: 60, height:60), type: .ballTrianglePath, color: .black)
let blurView = UIView()
// create your components,customise and return
return (blurView,activityIndicatorView)
}
}
now create a UIViewController Extension to start or stop loader
extension UIViewController {
func addLoaderToView(view:UIView,blurView:UIView ,activityIndicatorView:NVActivityIndicatorView) {
blurView.isHidden = false
blurView.frame = view.frame
blurView.backgroundColor = UIColor.gray.withAlphaComponent(0.5)
view.addSubview(blurView)
activityIndicatorView.center = blurView.center
view.addSubview(activityIndicatorView)
activityIndicatorView.startAnimating()
}
func removeLoader(activityIndicatorView:NVActivityIndicatorView,blurView:UIView) {
activityIndicatorView.stopAnimating()
blurView.isHidden = true
}
}
Now you can easily add or remove loader in any UIViewController
let (blurView,activityIndicatorView) = Helper.getLoaderViews() //In your class scope
//where you want to start
addLoaderToView(view:self.view,blurView:blurView ,activityIndicatorView:activityIndicatorView)
//where you want to stop
removeLoader(activityIndicatorView:activityIndicatorView,blurView:blurView)