RingProgressViewStyle 是一个为 SwiftUI 的 ProgressViewStyle 添加环形样式的库。默认外观基于 ProgressViewStyle 的 .linear 样式,但您可以自定义颜色和描边样式。
Example.swiftpm 可以在 Swift Playgrounds app 或 Xcode 中打开。
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,但 strokeBorder 是 InsettableShape 的一个方法。
所以我创建了一个解决方案。
将此存储库添加到您应用程序的包依赖项中。