Feedback/DSCircularProgress

DSCircularProgress

feedback
since 0.1.0

Circular ring with animated fill showing progress percentage.

iOS 17+macOS 14+watchOS 10+tvOS 17+visionOS 1+

Purpose

Use to display progress, completion rates, or metric percentages in a compact circular format.

Interactive Reference

Live showroom

Need the full visual surface?

Screenshots do not scale well across every component, state, and variant. For the real interactive reference, import the package and launch DSShowcaseRoot().

Best for exploring:

variants, states, categories, and real app examples in one place.

Props

PropTypeDefaultDescription
valuereqDouble—Current progress, relative to total.
totalDouble1.0Value that represents 100%.
sizeCGFloat64Diameter of the circle.
lineWidthCGFloat6Thickness of the ring.
colorColorDSColor.primaryRing color.
labelString?nilText in the center. nil shows the percentage.

Examples

Task completion

Completed tasks out of the total.

swift
DSCircularProgress(
    value: Double(tasksCompleted),
    total: Double(totalTasks),
    size: 100,
    lineWidth: 10,
    color: DSColor.success
)

Storage usage

Color reacts to the value; custom center label.

swift
let usage = usedStorage / totalStorage

DSCircularProgress(
    value: usage,
    color: usage > 0.9 ? DSColor.error : DSColor.primary,
    label: "\(Int(usedStorage)) GB"
)

Usage Guidelines

  • Use for single metric visualization (0-100%)
  • Choose colors that match the metric meaning (red for high usage, green for completion)
  • Keep size between 60-120pt for readability
  • Show percentage text for clarity

When to Use

✓ Use DSCircularProgress for:

  • • Single metric visualization (completion rate, storage usage)
  • • Compact progress indicators in cards or widgets
  • • Goal tracking and achievement displays
  • • Profile completion or skill level indicators

✗ Avoid using for:

  • • Multiple progress values (use DSProgressBar or chart)
  • • Linear progress (use DSProgressBar)
  • • Indeterminate loading (use DSSpinner)
  • • Very small sizes under 40pt (hard to read)

Consider instead:

DSProgressBar

For linear progress or multiple values

DSSpinner

For indeterminate loading states

DSMetricCard

For metrics with more context and labels

Accessibility

VoiceOver

Announces progress with natural language (e.g., '75 percent complete' or 'Upload, 75 percent complete' with label)

Keyboard

  • • Not interactive - display only

Dynamic Type

✓ Supported

Contrast

Colors follow design best practices for visibility

Traits

.updatesFrequently for live progress updatesPercentage value announcedOptional label for context

Related Components