在许多VC中使用活动指示器,而不需要快速复制代码

我有两个ViewControllers (A和B)在迅速IOS。 A和B都从互联网(分别)加载数据。 我想在加载时显示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() } 

并为ViewController B执行完全相同的操作,并调用在B视图控制器中声明的activityIndi​​catorBegin和activityIndi​​catorEnd函数。 不过,我想让代码更清洁。 怎么可能呢? 我正在努力使这些代码更清洁。

谢谢,

–UPDATE–

我会像下面的代码将工作的图像。 但它不是因为我不能在扩展中声明variables

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

创build一个BaseViewController并添加这两个方法并在该BaseViewController声明activityIndicator对象。 现在将BaseViewController作为所有ViewController父类。 之后,如果你想添加指标,就像这样调用

1)创buildBaseViewController

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

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

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 } 

}

用法:

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

您是否尝试使用A和B类中可复制的所有代码创build一个基础类? 如果这个类正在做完全不同的事情,你可以添加一个扩展的活动指标