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
的一个方法。
所以我创建了一个解决方案。
将此存储库添加到您应用程序的包依赖项中。