在许多VC中使用活动指示器,而无需重复编写代码

use*_*902 0 ios swift

我有两个ViewControllers(A和B)快速IOS。A和B都从Internet分别加载数据。我要activityIndicator在加载时显示。我知道我可以通过在每个VC中将其声明为如下方式来做坏事:

ViewController A

var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

func activityIndicatorBegin() {
    activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50))
    activityIndicator.center = self.view.center
    activityIndicator.hidesWhenStopped = true
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    view.addSubview(activityIndicator)
    activityIndicator.startAnimating()
    disableUserInteraction()

    greyView = UIView()
    greyView.frame = CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)
    greyView.backgroundColor = UIColor.blackColor()
    greyView.alpha = 0.5
    self.view.addSubview(greyView)
}

func activityIndicatorEnd() {
    self.activityIndicator.stopAnimating()
    enableUserInteraction()
    self.greyView.removeFromSuperview()
}
Run Code Online (Sandbox Code Playgroud)

并对ViewController B执行完全相同的操作,并调用在B视图控制器中声明的activityIndi​​catorBegin和activityIndi​​catorEnd函数。但是,我想使代码更整洁。怎么做?这些天,我正在努力使代码更整洁。

谢谢,

-更新-

我会想像下面的代码将工作。但这不是因为我无法在扩展中声明变量

    var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

extension UIViewController {
    func activityIndicatorBegin() {
    activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50))
    activityIndicator.center = self.view.center
    activityIndicator.hidesWhenStopped = true
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    view.addSubview(activityIndicator)
    activityIndicator.startAnimating()
    disableUserInteraction()

    greyView = UIView()
    greyView.frame = CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)
    greyView.backgroundColor = UIColor.blackColor()
    greyView.alpha = 0.5
    self.view.addSubview(greyView)
}

func activityIndicatorEnd() {
    self.activityIndicator.stopAnimating()
    enableUserInteraction()
    self.greyView.removeFromSuperview()
    }
}
Run Code Online (Sandbox Code Playgroud)

Nir*_*v D 8

创建一个BaseViewController并添加这两个方法并activityIndicator在其中声明 对象BaseViewController。现在BaseViewController作为所有ViewController. 之后,如果您想添加指标,只需像这样调用

1) 创建 BaseViewController

class BaseViewController: UIViewController {
    var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func activityIndicatorBegin() {
        activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50))
        activityIndicator.center = self.view.center
        activityIndicator.hidesWhenStopped = true
        activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
        view.addSubview(activityIndicator)
        activityIndicator.startAnimating()
        disableUserInteraction()

        greyView = UIView()
        greyView.frame = CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)
        greyView.backgroundColor = UIColor.blackColor()
        greyView.alpha = 0.5
        self.view.addSubview(greyView)
    }

    func activityIndicatorEnd() {
        self.activityIndicator.stopAnimating()
        enableUserInteraction()
        self.greyView.removeFromSuperview()
    }
}
Run Code Online (Sandbox Code Playgroud)

2)现在,将这个BaseViewController作为你所有的家长viewController喜欢这个

class ViewController1: BaseViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //Now if you want to add activityIndicator call like this
        self.activityIndicatorBegin()
        //or if you want remove activityIndicator 
        self.activityIndicatorEnd()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    } 
}
Run Code Online (Sandbox Code Playgroud)


小智 7

SWIFT 4

extension UIView{

func activityStartAnimating(activityColor: UIColor, backgroundColor: UIColor) {
    let backgroundView = UIView()
    backgroundView.frame = CGRect.init(x: 0, y: 0, width: self.bounds.width, height: self.bounds.height)
    backgroundView.backgroundColor = backgroundColor
    backgroundView.tag = 475647

    var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
    activityIndicator = UIActivityIndicatorView(frame: CGRect.init(x: 0, y: 0, width: 50, height: 50))
    activityIndicator.center = self.center
    activityIndicator.hidesWhenStopped = true
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
    activityIndicator.color = activityColor
    activityIndicator.startAnimating()
    self.isUserInteractionEnabled = false

    backgroundView.addSubview(activityIndicator)

    self.addSubview(backgroundView)
}

func activityStopAnimating() {
    if let background = viewWithTag(475647){
        background.removeFromSuperview()
    }
    self.isUserInteractionEnabled = true
}
Run Code Online (Sandbox Code Playgroud)

}

用法:

self.view.activityStartAnimating(activityColor: UIColor.white, backgroundColor: UIColor.black.withAlphaComponent(0.5))


self.view.activityStopAnimating()
Run Code Online (Sandbox Code Playgroud)