Swift3.0 MBProgressHUD的封装使用

司徒正信
2023-12-01

创建 UIViewController+HUD.swift

import Foundation
import MBProgressHUD
// keyWindow
let KeyWindow : UIWindow = UIApplication.shared.keyWindow!

private var HUDKey = "HUDKey"
extension UIViewController
{
    var hud : MBProgressHUD?
        {
        get{
            return objc_getAssociatedObject(self, &HUDKey) as? MBProgressHUD
        }
        set{
            objc_setAssociatedObject(self, &HUDKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }

    /**
     显示提示信息(有菊花, 一直显示, 不消失),默认文字“加载中”,默认偏移量0

     - parameter view:    显示在哪个View上
     - parameter hint:    提示信息
     - parameter yOffset: y上的偏移量
     */
     func showHud(in view: UIView, hint: String = "加载中...", yOffset:CGFloat? = 0){
        let HUD = MBProgressHUD(view: view)
        HUD.label.text = hint
        HUD.label.font = UIFontSize(size: 15*UIRate)
        //设为false后点击屏幕其他地方有反应
        HUD.isUserInteractionEnabled = true
        //HUD内的内容的颜色
        HUD.contentColor = UIColor(red:0.82, green:0.82, blue:0.82, alpha:1.00)
        //View的颜色
        HUD.bezelView.color = UIColorHex("000000", 0.7)
        //style -blur 不透明 -solidColor 透明
        HUD.bezelView.style = .solidColor
        HUD.margin = 12*UIRate
        //偏移量,以center为起点
//        HUD.offset.y = yOffset ?? 0
        view.addSubview(HUD)
        HUD.show(animated: true)
        hud = HUD
    }

    /**
     显示纯文字提示信息(显示在keywindow上),默认时间2s,默认偏移量0

     - parameter hint: 提示信息
     - parameter duration: 持续时间(不填的话, 默认两秒)
     - parameter yOffset: y上的偏移量
     */
    func showHintInKeywindow(hint: String, duration: Double = 2.0, yOffset:CGFloat? = 0) {
        let view = KeyWindow
        let HUD = MBProgressHUD(view: view)
        view.addSubview(HUD)
        HUD.animationType = .zoomOut
        HUD.isUserInteractionEnabled = false
        HUD.bezelView.color = UIColor.black
        HUD.contentColor = UIColor.white
        HUD.mode = .text
        HUD.label.text = hint
        HUD.show(animated: true)
        HUD.removeFromSuperViewOnHide = false
        HUD.offset.y = yOffset ?? 0
        HUD.margin = 12*UIRate
        HUD.hide(animated: true, afterDelay: duration)
        hud = HUD
    }

    /**
     显示纯文字提示信息,默认时间1.5s,默认偏移量0

     - parameter view: 显示在哪个View上
     - parameter hint: 提示信息
     - parameter duration: 持续时间(不填的话, 默认两秒)
     - parameter yOffset: y上的偏移量
     */
    func showHint(in view: UIView, hint: String, duration: Double = 1.5, yOffset:CGFloat? = 0) {
        let HUD = MBProgressHUD(view: view)
        view.addSubview(HUD)
        HUD.animationType = .zoomOut
        HUD.bezelView.color = UIColor.black
        HUD.contentColor = UIColor.white
        HUD.mode = .text
        HUD.label.text = hint
        HUD.isUserInteractionEnabled = false
        HUD.removeFromSuperViewOnHide = false
        HUD.show(animated: true)
        HUD.offset.y = yOffset ?? 0
        HUD.margin = 12*UIRate
        HUD.hide(animated: true, afterDelay: duration)
        hud = HUD
    }

    /// 移除提示
    func hideHud() {
        //如果解包成功则移除,否则不做任何事
        if let hud = hud {
            hud.hide(animated: true)
        }
    }
   }

首先导入MBProgressHUD,然后进行封装,在使用时,在UIViewController 中

 //添加HUD
 self.showHud(in: self.view, hint: "加载中...")
//隐藏HUD
self.hideHud()
 类似资料: