环形进度条样式 (RingProgressViewStyle)

License

RingProgressViewStyle 是一个为 SwiftUI 的 ProgressViewStyle 添加环形样式的库。默认外观基于 ProgressViewStyle.linear 样式,但您可以自定义颜色和描边样式。

示例

Example.swiftpm 可以在 Swift Playgrounds app 或 Xcode 中打开。

preview

动机

ProgressViewStyle 中已经存在 .circular 样式,但它只是一个指示器,而不是一个进度条。所以基本上,您必须自己实现。

幸运的是,如果你谷歌搜索 "SwiftUI progress ring",你可以找到很多代码示例。几乎所有代码都看起来像这样:

Circle()
    .trim(from: 0, to: value)
    .stroke(...)
    .rotationEffect(.degrees(-90))

但是,当你尝试使用 .frame(width: ..., height: ...) 指定它的大小时,它的描边线会溢出它的框架。

为了防止这种情况,我经常使用 strokeBorder 而不是 stroke

Circle()
    .trim(from: 0, to: value)
    .strokeBorder(...)
    .rotationEffect(.degrees(-90))

但它会发生编译错误,因为 trim 返回的 some Shape 不符合 InsettableShape,但 strokeBorderInsettableShape 的一个方法。

所以我创建了一个解决方案。

如何使用

将此存储库添加到您应用程序的包依赖项中。

支持的平台