如何隔离swift中的loader屏幕代码?

How to isolate the loader screen code in swift?

我已经创建了这个自定义代码来在我的项目中创建一个加载器。问题是我必须将此函数复制并粘贴到我所有的 classes 中。有什么方法可以在一个全局函数中声明此代码 class 并通过调用在我想使用的任何地方使用它们。

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

        }

    }

您可以创建 UIView 扩展

extension UIView {
  func showActivity() {
    let activityIndicatorView = NVActivityIndicatorView(frame: CGRect(x: 80, y: 80, width: 60, height:60), type: .ballTrianglePath, color: .black)
    let blurView = UIView()
          DispatchQueue.main.async {
                self.blurView.isHidden = false
                self.blurView.frame = self.frame
                self.blurView.backgroundColor = UIColor.gray.withAlphaComponent(0.5)

                self.addSubview(self.blurView)
                self.activityIndicatorView.center = self.blurView.center
                self.addSubview(self.activityIndicatorView)

               self.activityIndicatorView.startAnimating()
            }
     }

}

首先创建函数以获取 activityIndi​​catorViewblurView。因为您不需要在 everywhere.And 中重复代码,所以可以轻松地在一个地方更改整个加载器视图

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)
    }
}

现在创建一个 UIViewController 扩展来启动或停止加载程序

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
    }
}

现在您可以轻松地在任何 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)