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

时间:2016-03-31 07:33:57

标签: ios swift uiactivityindicatorview

您好我已经创建了一个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

1 个答案:

答案 0 :(得分:1)

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

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