封装一个简单的 HUD 视图
开发中我们通常在 App 长时间加载某些数据的时候需要展示 HUD 视图,告知用户当前 App 的状态。Apple 为我们提供了 UIAlertView
UIActivityView
方便我们在必要的时候提醒用户。 但通常它们提供的 API 无法让我们做针对性的自定义,今天我们来实现一个简单的自定义 HUD。
首先我们先看一下在 App 中的实际运行效果。
结构非常简单: 一个灰色半透明的 UIView
和一个 UIAvtivityIndicatorView
.
开始我们的工作,首先创建一个抽象类 CubeHUD
, 它负责展示和隐藏 HUD 逻辑。考虑到实际开发中在很多界面下都需要展示 HUD ,所以我们直接使用单例。
|
|
在 swift 中完成单例非常简单, 只需上面一行代码。
接着我们完成CubeHUD
中的自定义试图, 我们来实现 containerView
和 activityIndicator
。
|
|
我们还需要定义两个变量,isShowing
用来确保 HUD 视图同一时间只能弹出一个。dismissTimer
,用来主动设置 HUD 视图消失的时间。
|
|
之后我们来实现展示 HUD 的逻辑,showActivityIndicatorWhile(blockingUI: Bool)
|
|
接着, 我们来实现 HUD 隐藏的逻辑 hideActivityIndicator(completion: @escaping () -> Void )
这个方法会接受一个闭包. 用来定义 HUD 隐藏结束后需要执行的任务.
|
|
上面的代码理解起来也非常简单, 将 activityIndicator
缩小隐藏之后, 将 containerView
从 window 上移除.
我们再定义两个接口, 让外部调用隐藏 HUD 方法时更加便捷.
|
|
OK! Done.
我们在外部只需要使用 CubeHUD.showActivityIndicator()
和 CubeHUD.hideActivityIndicator()
两个方法就可以展示和隐藏 HUD 视图了.