为 UIActivityIndi​​cator 创建一个实用函数,以根据控制器中的条件显示和隐藏

Create a Utility function for UIActivityIndicator to show and hide depending on the condition in controller

你好,我创建了一个 swift 文件,我在其中编写了一些我在多个控制器中使用的实用函数。我还为 UIActivityIndicator 编写了函数。但不知何故它没有按预期工作。

这是我的函数

static func showIndicatorView(backgroundView: UIView,controller: UIViewController)->UIActivityIndicatorView{


        let loadingIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
        let backgroundView = UIView()

        backgroundView.layer.cornerRadius = 05
        backgroundView.clipsToBounds = true
        backgroundView.opaque = false
        backgroundView.backgroundColor = UIColor(white: 0.0, alpha: 0.6)

        loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
        loadingIndicator.color = UIColor.whiteColor()
        loadingIndicator.startAnimating()

        let loadingLabel = UILabel()
        loadingLabel.text = "Loading..."
        loadingLabel.textColor = UIColor.whiteColor()
        let textSize: CGSize = loadingLabel.text!.sizeWithAttributes([NSFontAttributeName: loadingLabel.font ])

        loadingLabel.frame = CGRectMake(50, 0, textSize.width, textSize.height)
        loadingLabel.center.y = loadingIndicator.center.y

        backgroundView.frame = CGRectMake(0, 0, textSize.width + 70, 50)
        backgroundView.center = controller.view.center;

        controller.view.addSubview(backgroundView)
        backgroundView.addSubview(loadingIndicator)
        backgroundView.addSubview(loadingLabel)
        return loadingIndicator

    }

我在控制器中这样做是为了显示和隐藏指示器

显示 Utility.showIndicatorView(backgroundView, controller: self).startAnimating()

隐藏

Utility.showIndicatorView(backgroundView, controller: self).startAnimating()

有时 UiIndicatorView 背景不会从控制器中移除。请检查我的代码,让我知道如何在一两行中显示和隐藏 uiindicator

为您的加载视图创建一个 class 并添加函数来显示和隐藏视图,如下所示:

import UIKit
class LoadingView: UIView {

override init (frame : CGRect) {
    super.init(frame : frame)

    let loadingIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
    let backgroundView = UIView()

    backgroundView.layer.cornerRadius = 05
    backgroundView.clipsToBounds = true
    backgroundView.opaque = false
    backgroundView.backgroundColor = UIColor(white: 0.0, alpha: 0.6)

    loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    loadingIndicator.color = UIColor.whiteColor()
    loadingIndicator.startAnimating()

    let loadingLabel = UILabel()
    loadingLabel.text = "Loading..."
    loadingLabel.textColor = UIColor.whiteColor()
    let textSize: CGSize = loadingLabel.text!.sizeWithAttributes([NSFontAttributeName: loadingLabel.font ])

    loadingLabel.frame = CGRectMake(50, 0, textSize.width, textSize.height)
    loadingLabel.center.y = loadingIndicator.center.y

    backgroundView.frame = CGRectMake(0, 0, textSize.width + 70, 50)
    backgroundView.center = self.center;

    self.addSubview(backgroundView)
    backgroundView.addSubview(loadingIndicator)
    backgroundView.addSubview(loadingLabel)
}

convenience init () {
    self.init(frame:UIScreen.mainScreen().bounds)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func showLoadingView() {
    if let rootViewController = UIApplication.topViewController() {
        rootViewController.view.addSubview(self)
        self.bringSubviewToFront(rootViewController.view)
        UIApplication.sharedApplication().networkActivityIndicatorVisible = true
    }
}

func hideLoadingView() {
    UIApplication.sharedApplication().networkActivityIndicatorVisible = false
    self.removeFromSuperview()
}
}


// Get the visible ViewController
extension UIApplication {
    class func topViewController(base: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController? {

        if let nav = base as? UINavigationController {
            return topViewController(nav.visibleViewController)
        }

        if let tab = base as? UITabBarController {
            let moreNavigationController = tab.moreNavigationController

            if let top = moreNavigationController.topViewController where top.view.window != nil {
                return topViewController(top)
            } else if let selected = tab.selectedViewController {
                return topViewController(selected)
            }
        }

        if let presented = base?.presentedViewController {
            return topViewController(presented)
        }

        return base
    }
}

然后在 ViewController 中初始化加载视图。

let lv = LoadingView()
lv.showLoadingView()

lv.hideLoadingView()