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 note: Carthage support for IBDesignable and IBInspectable is broken due to how frameworks work. So if you decide on using Carthage, you will not be able to use IB to design this view. Take a look here for the issue.

To use with Carthage

  1. Make sure Carthage is installed

    brew install carthage

  2. Add this repo to your Cartfile

    github "luispadron/UICircularProgressRing"

  3. Drag the UICircularProgressRing.framework from MyProjDir/Carthage/Builds/iOS/UICircularProgressRing into the General -> Embeded Binaries section of your Xcode project.


  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: 554
Help us keep the lights on


Used By

Total: 0


v1.7.5 - Dec 7, 2017

Version 1.7.5

  • Add fix for progress ring requiring square frame
  • Fix issue where height was set to width.
  • Use min between height and width to calculate radius for both outer and inner ring

v1.7.4 - Oct 2, 2017

Version 1.7.4

Code optimization & Added missing test cases

  • Refactored test cases to also test UICircularProgressRingLayer.
  • Add missing test cases for new gradient members.
  • Add explicit typing to local variables in order to speed up compilation.
  • Add new Swift compiler flags to warn about long function/type inference compilation.

v1.7.3 - Sep 29, 2017

Version 1.7.3

  • Improved calculations for inner ring angle.

v1.7.2 - Sep 11, 2017

Version 1.7.2

  • Add s.ios.deployment_target = "8.0" to Podspec, thanks to @younatics.

v1.7.1 - Aug 30, 2017

Version 1.7.1

  • Fix issue where outer ring width couldn't be smaller than inner ring width. Thanks to: SwiftTsubame for the contribution.