This is a library that adds a ring style to SwiftUI's ProgressViewStyle. The default apperance is based on the .linear style of ProgressViewStyle, but you can customize colors and a stroke style.
The .circular style already exists in ProgressViewStyle, but it's just an indicator, not a progress bar. So basically, you have to implement that by yourself.
Fortunately, if you google "SwiftUI progress ring", you can see a number of code examples. Almost all of them looks like:
Circle()
.trim(from: 0, to: value)
.stroke(...)
.rotationEffect(.degrees(-90))However, when you try to specify its size by .frame(width: ..., height: ...), its stroke line overflows its frame.
To prevent this, I often use strokeBorder instead of stroke.
Circle()
.trim(from: 0, to: value)
.strokeBorder(...)
.rotationEffect(.degrees(-90))But it occurs a compilation error because trim returns some Shape that doesn't conform to InsettableShape but strokeBorder is a method of InsettableShape.
So I created a solution.
Add this repository to your package dependencies in your app, and select the "RingProgressViewStyle" product. The "Showcase" product is an example app for Swift Playgrounds, so you don't need it when you want to use this package only as a library.
- iOS 14+
- macOS 11+
