Circular progress indicator for your macOS app
CircularProgress
Circular progress indicator for your macOS app.
This package is used in production by the Gifski and HEIC Converter app.
Requirements
- macOS 10.12+
- Xcode 10+
- Swift 4.2+
Install
SwiftPM
.package(url: "https://github.com/sindresorhus/CircularProgress", from: "0.1.2")
Carthage
github "sindresorhus/CircularProgress"
CocoaPods
pod 'CircularProgressMac'
Usage
Also check out the example app in the Xcode project.
Manually set the progress
import Cocoa
import CircularProgress
@NSApplicationMain
final class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet private var window: NSWindow!
let circularProgress = CircularProgress(size: 200)
func applicationDidFinishLaunching(_ notification: Notification) {
window.contentView!.addSubview(circularProgress)
foo.onUpdate = { progress in
self.circularProgress.progress = progress
}
}
}
Specify a Progress
instance
import Cocoa
import CircularProgress
@NSApplicationMain
final class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet private var window: NSWindow!
let progress = Progress(totalUnitCount: 1)
func applicationDidFinishLaunching(_ notification: Notification) {
window.contentView!.addSubview(circularProgress)
progress?.becomeCurrent(withPendingUnitCount: 1)
circularProgress.progressInstance = progress
}
}
API
/**
Color of the circular progress view.
Defaults to the user's accent color. For High Sierra and below it uses a fallback color.
*/
@IBInspectable var color: NSColor = .controlAccentColor
/**
Show `✔` instead `100%`.
*/
@IBInspectable var showCheckmarkAtHundredPercent: Bool = true
/**
The progress value in the range `0...1`.
- Note: The value will be clamped to `0...1`.
*/
@IBInspectable var progress: Double = 0
/**
Let a `Progress` instance update the `progress` for you.
*/
var progressInstance: Progress?
/**
Reset the progress back to zero without animating.
*/
func resetProgress() {}
init(frame: CGRect) {}
init?(coder: NSCoder) {}
/**
Initialize the progress view with a width/height of the given `size`.
*/
convenience init(size: Double) {}