Chrysan 2.0.7

Chrysan 2.0.7

Maintained by Harley-xk.



Chrysan 2.0.7

  • By
  • Harley-xk

Chrysan

CI Status Version Language License Platform twitter

Chrysan 是一个简单易用的 HUD 库,使用 iOS 自带的 UIBlurEffect 毛玻璃特效。

使用基于 UIViewPropertyAnimator 的动画,可以自定义想要的效果

多种内置的指示器效果,同样支持自定义,并且支持 GIF 动图

进度指示器,内置环形和条形进度指示器,支持自定义进度文字和颜色

静态状态指示器, 内置带动画的成功和失败指示器,支持自定义路径动画

支持自定义扩展更多状态,支持自定义图标指示器,支持使用系统内置 SF Symbols 作为图标

纯文本展示,支持单行和多行文本

适配

Chrysan 2.x 是一个完全重写的版本,以支持更多的指示器类型、更多的动画配置,以及完全开放的自定义 API。

Chrysan 2.x 支持 iOS 11+ 以及 Swift 5.3+。如需支持更早的版本,请使用 1.x 版。

安装

注意:Chrysan 依赖 SnapKit 5.x 进行 UI 布局,确保你没有引用与其冲突的其他第三方库

通过 CocoaPods 安装

pod 'Chrysan'

通过 SPM 安装

向 Package.swift 添加依赖:

dependencies: [
    .package(url: "https://github.com/Harley-xk/Chrysan.git", .upToNextMajor(from: "2.0.0")),
],

通过 Carthage 安装

github "Harley-xk/Chrysan"

在命令行执行 carthage update 来完成编译,然后将 Chrysan.framework 添加到你的项目中。

确保将 Chrysan.framework 添加到 target 的 Embedded Binaries 配置项中

使用

在 ViewController 中访问 Chrysan

通过 viewController.chrysan 方法可以访问当前视图控制器的 chrysan 组件并自动创建。chrysan 会自动添加到 viewController 的根视图。

快速显示 Chrysan

chrysan.changeStatus(to: .loading(message: "正在加载"))

显示进度

let progress = 0.1

// 显示进度
chrysan.changeStatus(to: .progress(message: "正在下载", progress: progress))

// 自定义进度文字
chrysan.changeStatus(to: .progress(message: "正在下载", progress: progress, progressText: "325/512"))

隐藏 Chrysan

// 立刻隐藏 chrysan
chrysan.hide()
// 1 秒后隐藏 chrysan
chrysan.hide(afterDelay: 1)

自动关联异步任务

针对 Swift 新的异步 API,新增了自动关联并发任务的方法,可以在任务执行前后自动显示和隐藏 HUD

func doSomeTasks() {
    chrysan.loading("doing some long term tasks") {
        await veryLongTimeTasks()
    }
}

func veryLongTimeTask() async {
    await doSomeVeryLongTimeTask1()
    await doSomeVeryLongTimeTask2()
    await doSomeVeryLongTimeTask3()
}

预设状态

Chrysan 内置了多种状态可以使用:

public extension Status {
    /// 预设状态:静默状态
    static let idle = Status(id: .idle)

    /// 纯文本的状态,此时一般只显示文本内容
    /// - Parameter message: 文本内容,支持多行
    static func plain(message: String) -> Status {
        return Status(id: .plain, message: message)
    }

    /// 加载中状态, 所有的 loading 状态都具有相同的 id
    /// - Parameter message: 自定义消息内容
    static func loading(message: String? = nil) -> Status {
        return Status(id: .loading, message: message)
    }

    /// 预设状态:带进度的状态,所有的 progress 状态都具有相同的 id
    static func progress(
        message: String? = nil,
        progress: Double,
        progressText: String? = nil
    ) -> Status {
        return Status(
            id: .progress,
            message: message,
            progress: progress,
            progressText: progressText
        )
    }

    /// 预设状态:成功
    static func success(message: String? = nil) -> Status {
        return Status(id: .success, message: message)
    }

    /// 预设状态:失败
    static func failure(message: String? = nil) -> Status {
        return Status(id: .failure, message: message)
    }
}

更多内容请查看示例以及代码注释。