Swiftpack.co - Package - luispadron/UICircularProgressRing


A circular progress bar for iOS written in Swift



  • Interface builder designable
  • Highly customizable and flexible
  • Easy to use
  • Sleek animations
  • Written in Swift

Apps Usig UICircularProgressRing


CocoaPods (Recommended)

  1. Install CocoaPods

  2. Add this repo to your Podfile

    target 'Example' do
    	# IMPORTANT: Make sure use_frameworks! is included at the top of the file
    	pod 'UICircularProgressRing'
  3. Run pod install

  4. Open up the .xcworkspace that CocoaPods created

  5. Done!


Important: Interface builder support with Carthage is either broken or extremely limted

To use with Carthage

  1. Make sure Carthage is installed

    brew install carthage

  2. Add this repo to your Cartfile

    github "luispadron/UICircularProgressRing"

  3. Install dependencies carthage update --platform iOS

Either Embed or Link the framework
  1. Drag the UICircularProgressRing.framework from MyProjDir/Carthage/Builds/iOS/UICircularProgressRing into the General -> Embeded Binaries section of your Xcode project.
  1. Drag the UICircularProgressRing.framework from MyProjDir/Carthage/Builds/iOS/UICircularProgressRing into the General -> Linked Frameworks and Binaries section of your Xcode project.
  2. Add a run script phase, under Build Phases -> +, put this in the code for the run script: /usr/local/bin/carthage copy-frameworks
  3. Add a Copy Files Phase under Build Phases -> +, select Frameworks as destination and add UICircularProgressRing.framework, make sure Code Sign On Copy is enabled.


  1. Simply download the UICircularProgressRingView.swift, UICircularProgressRingLayer.swift and UICiruclarProgressRingDelegate.swift files from here into your project, make sure you point to your projects target


Interface Builder

Simply drag a UIView into your storyboard. Make sure to subclass UICircularProgressRingView and that the module points UICircularProgressRing.

Design your heart out



override func viewDidLoad() {
  // Create the view
  let progressRing = UICircularProgressRingView(frame: CGRect(x: 0, y: 0, width: 240, height: 240))
  // Change any of the properties you'd like
  progressRing.maxValue = 50
  progressRing.innerRingColor = UIColor.blue
  // etc ...

To set a value and animate the view

// Somewhere not in viewDidLoad (since the views have not set yet, thus cannot be animated)
// Remember to use unowned or weak self if refrencing self to avoid retain cycle
progressRing.setProgress(value: 49, animationDuration: 2.0) {
  print("Done animating!")
  // Do anything your heart desires...


Please read this before creating an issue about how to use the package:


Example project

Take a look at the example project over here

  1. Download it
  2. Open the Example.xcworkspace in Xcode
  3. Mess around and experiment!


Do you use this library? Want to be featured? Go here.


Stars: 691
Help us keep the lights on


Used By

Total: 0


v2.0.0 - Apr 12, 2018

Version 2.0.0

Add feature requested in #86 and general clean up and refactoring of API.

  • Add new ring paramater to functions didUpdateProgressValue and willDisplayLabel so that they can be used with multiple rings if needed.

Breaking API Changes

  • finishedUpdatingProgress(forRing:) now changed to finishedUpdatingProgress(for:)
  • didUpdateProgressValue(to:) now changed to didUpdateProgressValue(for:to:)
  • willDisplayLabel(label:) now changed to willDisplayLabel(for:_:)
  • setProgress(value:animationDuration:completion:) now changed to setProgress(to:duration:completion:)

v1.8.5 - Apr 4, 2018

Version 1.8.5

  • Build project with Swift 4.1

v1.8.4 - Feb 16, 2018

Version 1.8.4

  • Mark delegate methods as @objc optional to allow default or optional conformance, thanks to @AbelToy

v1.8.3 - Feb 14, 2018

Version 1.8.3

  • Fix issue with @objc and new willDisplayLabel method in UICircularProgressRingDelegate.

v1.8.2 - Feb 14, 2018

Version 1.8.2

  • Add ability to modify ring label before drawing, thanks to @hohteri