如何在tableView加载时显示活动指标?

当我切换我的标签之间加载了几秒钟,我想知道我的数据正在加载。 为此,我决定添加一个活动指标。

我写了一个小函数:

func showActivityIndicator() { dispatch_async(dispatch_get_main_queue()) { self.spinner = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge) self.spinner.frame = CGRect(x: 0.0, y: 0.0, width: 80.0, height: 80.0) self.spinner.center = CGPoint(x:self.loadingView.bounds.size.width / 2, y:self.loadingView.bounds.size.height / 2) self.loadingView.addSubview(self.spinner) self.view.addSubview(self.loadingView) self.spinner.startAnimating() } } 

这将显示我的指标。 并尝试从我的infoController点击button时使用它:

 @IBAction func goToMainFromInfo(sender: AnyObject) { self.showActivityIndicator() self.performSegueWithIdentifier("fromMainToInfoWActivity", sender: nil) self.hideActivityIndicator() } } 

我在继续执行和隐藏之后显示它。 它不能帮助我。 当我尝试使用同步:

 @IBAction func goToMainFromInfo(sender: AnyObject) { dispatch_async(dispatch_get_main_queue()) { self.showActivityIndicator() self.performSegueWithIdentifier("fromMainToInfoWActivity", sender: nil) self.hideActivityIndicator() } } 

但是它也没有帮助。 当我按Tab键时,不透明度变成0.5,我等待加载。 但是我没有看到我的活动指标。

问题是什么?

试试这个:

 var indicator = UIActivityIndicatorView() func activityIndicator() { indicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 40, 40)) indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray indicator.center = self.view.center self.view.addSubview(indicator) } 

而你想开始animation的地方

 indicator.startAnimating() indicator.backgroundColor = UIColor.whiteColor() 

停止:

 indicator.stopAnimating() indicator.hidesWhenStopped = true 

注意:避免同时启动和停止的呼叫。 只是给一些条件。

Swift 3.0

// UIView扩展

 fileprivate var ActivityIndicatorViewAssociativeKey = "ActivityIndicatorViewAssociativeKey" public extension UIView { var activityIndicatorView: UIActivityIndicatorView { get { if let activityIndicatorView = getAssociatedObject(&ActivityIndicatorViewAssociativeKey) as? UIActivityIndicatorView { return activityIndicatorView } else { let activityIndicatorView = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 40, height: 40)) activityIndicatorView.activityIndicatorViewStyle = .gray activityIndicatorView.color = .gray activityIndicatorView.center = center activityIndicatorView.hidesWhenStopped = true addSubview(activityIndicatorView) setAssociatedObject(activityIndicatorView, associativeKey: &ActivityIndicatorViewAssociativeKey, policy: .OBJC_ASSOCIATION_RETAIN_NONATOMIC) return activityIndicatorView } } set { addSubview(newValue) setAssociatedObject(newValue, associativeKey:&ActivityIndicatorViewAssociativeKey, policy: .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } } 

// NSObject扩展

 public extension NSObject { func setAssociatedObject(_ value: AnyObject?, associativeKey: UnsafeRawPointer, policy: objc_AssociationPolicy) { if let valueAsAnyObject = value { objc_setAssociatedObject(self, associativeKey, valueAsAnyObject, policy) } } func getAssociatedObject(_ associativeKey: UnsafeRawPointer) -> Any? { guard let valueAsType = objc_getAssociatedObject(self, associativeKey) else { return nil } return valueAsType } } 

开始animation

tableView.activityIndicatorView.startAnimating()

停止animation

tableView.activityIndicatorView.stopAnimating()

你可以在Magic中find更多的代码

Swift 2+

  class ViewController: UITableViewController { weak var activityIndicatorView: UIActivityIndicatorView! override func viewDidLoad() { super.viewDidLoad() let activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray) tableView.backgroundView = activityIndicatorView self.activityIndicatorView = activityIndicatorView activityIndicatorView.startAnimating() } ... } 

这段代码可以帮助你:)

  let indicator:UIActivityIndicatorView = UIActivityIndicatorView (activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray) indicator.color = UIColor .magentaColor() indicator.frame = CGRectMake(0.0, 0.0, 10.0, 10.0) indicator.center = self.view.center self.view.addSubview(indicator) indicator.bringSubviewToFront(self.view) indicator.startAnimating() 

迅速

把它放在你的课堂下面:

 let indicator:UIActivityIndicatorView = UIActivityIndicatorView (activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray) 

把它放在你的loadView()中:

 indicator.color = UIColor .magentaColor() indicator.frame = CGRectMake(0.0, 0.0, 10.0, 10.0) indicator.center = self.view.center self.view.addSubview(indicator) indicator.bringSubviewToFront(self.view) indicator.startAnimating() 

在我的情况下,我通过一个func请求来请求json对象,所以我把它放在该函数的末尾,以便在数据加载后删除活动指示器:

 self.indicator.stopAnimating() self.indicator.hidesWhenStopped = true 

另一种方法,在我的代码中,我添加了一个扩展UITableView(Swift 2.3):

 extension UITableView { func activityIndicator(center: CGPoint = CGPointZero, loadingInProgress: Bool) { let tag = 12093 if loadingInProgress { var indicator = UIActivityIndicatorView() indicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 40, 40)) indicator.tag = tag indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge indicator.color = //Your color here indicator.center = center indicator.startAnimating() indicator.hidesWhenStopped = true self.superview?.addSubview(indicator) }else { if let indicator = self.superview?.viewWithTag(tag) as? UIActivityIndicatorView { { indicator.stopAnimating() indicator.removeFromSuperview() } } } } 

注意:我的tableview被embedded到一个UIView(superview)

  func setupSpinner(){ spinner = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 40, height:40)) spinner.color = UIColor(Colors.Accent) self.spinner.center = CGPoint(x:UIScreen.main.bounds.size.width / 2, y:UIScreen.main.bounds.size.height / 2) self.view.addSubview(spinner) spinner.hidesWhenStopped = true } 

使用“lazy var”。 这比function更好

 fileprivate lazy var activityIndicatorView: UIActivityIndicatorView = { let activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .gray) activityIndicatorView.hidesWhenStopped = true // Set Center var center = self.view.center if let navigationBarFrame = self.navigationController?.navigationBar.frame { center.y -= (navigationBarFrame.origin.y + navigationBarFrame.size.height) } activityIndicatorView.center = center self.view.addSubview(activityIndicatorView) return activityIndicatorView }() 

只要在任何地方启动微调

喜欢这个

 func requestData() { // Request something activityIndicatorView.startAnimating() }