Giter Site home page Giter Site logo

rpcircularprogress's Introduction

RPCircularProgress

Coverage Status Build Status MIT licensed CocoaPods Swift

⚠️ To use with Swift 2.3 please ensure you are using == 0.2.3 ⚠️

⚠️ To use with Swift 3.x please ensure you are using >= 0.3.0 ⚠️

⚠️ To use with Swift 4.x please ensure you are using >= 0.4.0 ⚠️

⚠️ To use with Swift 4.2 please ensure you are using >= 0.4.1 ⚠️

⚠️ To use with Swift 5.0 please ensure you are using >= 0.5.0 ⚠️

UIView subclass written in Swift to show circular progress.

Example Usage

Is your app using it? Let me know!

Please see the included example app for sample usage.

Styles

  • Indeterminate (spins infinitely)
  • Normal (set progress between 0.0 and 1.0)
  • Mixed (can make it indeterminate, but also animate progress to 1.0)

Public API

/**
 Enables or disables the indeterminate (spinning) animation

 - parameter enabled:    Whether or not to enable the animation (defaults to `true`)
 - parameter completion: An optional closure to execute after the animation completes
 */
open func enableIndeterminate(_ enabled: Bool = true, completion: CompletionBlock? = nil) {}
/**
 Updates the progress bar to the given value with the optional properties

 - parameter progress:     The progress to update to, pinned between `0` and `1`
 - parameter animated:     Whether or not the update should be animated (defaults to `true`)
 - parameter initialDelay: Sets an initial delay before the animation begins
 - parameter duration:     Sets the overal duration that the animation should complete within
 - parameter completion:   An optional closure to execute after the animation completes
 */
open func updateProgress(_ progress: CGFloat, animated: Bool = true, initialDelay: CFTimeInterval = 0, duration: CFTimeInterval? = nil, completion: CompletionBlock? = nil) {}

Properties

Note: Most properties below are @IBInspectable, but I don't use Interface Builder personally so let me know if you see any issues.

var trackTintColor: UIColor

  • The color of the empty progress track (gets drawn over)

var progressTintColor: UIColor

  • The color of the progress bar

var innerTintColor: UIColor?

  • The color the notched out circle within the progress area (if there is one)

var roundedCorners: Bool

  • Sets whether or not the corners of the progress bar should be rounded

var thicknessRatio: CGFloat

  • Sets how thick the progress bar should be (pinned between 0.01 and 1)

var clockwiseProgress: Bool

  • Sets whether or not the animation should be clockwise

var timingFunction: CAMediaTimingFunction

  • A timing function defining the pacing of the animation. Defaults to ease in, ease out.

var progress: CGFloat

  • Getter for the current progress (not observed from any active animations)

var indeterminateProgress: CGFloat

  • Sets how much of the progress bar should be filled during an indeterminate animation, pinned between 0.05 and 0.9
  • Note: This can be overriden / animated from by using updateProgress(...)

var indeterminateDuration: CFTimeInterval

  • Controls the speed at which the indeterminate progress bar animates

Supports

Swift, ARC & iOS 8+, Autolayout or springs and struts

A little help from my friends

Please feel free to fork and create a pull request for bug fixes or improvements, being sure to maintain the general coding style, adding tests, and adding comments as necessary.

Credit

This library is effectively a Swift port of DACircularProgress with some minor changes to the API, so it should be fairly easy to act as a replacement. I really loved that library but unfortunately it wasn't being maintained.

rpcircularprogress's People

Contributors

alex-taffe avatar kamrankhan07 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rpcircularprogress's Issues

libswiftXCTest.dylib Reason: image not found

I am getting this wierd crash right after installing this as a pod and running the application

dyld: Library not loaded: @rpath/XCTest.framework/XCTest
Referenced from: /Users/colworx/Library/Developer/CoreSimulator/Devices/8F5D5AC5-3A58-4577-AAC1-BA1A170D728C/data/Containers/Bundle/Application/E1DE38E0-B483-4CD5-A6E8-2665EF17EEAB/squad.app/Frameworks/libswiftXCTest.dylib
Reason: image not found

Pausing / resuming animation

Question

From an issue via email:

How do I pause and resume an animation (i.e. one that's in the middle of animating)?

Answer

Read Apple's technical note here: https://developer.apple.com/library/content/qa/qa1673/_index.html

e.g.

func pauseAnimation() {
  var pausedTime = layer.convertTime(CACurrentMediaTime(), fromLayer: nil)
  layer.speed = 0.0
  layer.timeOffset = pausedTime
}

func resumeAnimation() {
  var pausedTime = layer.timeOffset
  layer.speed = 1.0
  layer.timeOffset = 0.0
  layer.beginTime = 0.0
  let timeSincePause = layer.convertTime(CACurrentMediaTime(), fromLayer: nil) - pausedTime
  layer.beginTime = timeSincePause
}

[StackView] Dot showing if clockwiseProgress is false

First of all, thank you for sharing your awesome work!

While I was using your library, I noticed that I get a little dot on my view when I set clockwiseProgress = false
screenshot
screen shot 2018-05-24 at 6 47 31 pm

I get this issue whether I implement it programmatically or using storyboard. It works fine if clockwiseProgress = true. I am using Swift 4, Xcode Version 9.3. Do you have any idea why this would happen?

Background execution

When i press my home button to turn my app to background, my circular progress completion handler is directly executed without waiting the already set duration .
Any solution ?

Swift 3 to Objc Generated interface

Im trying to use in an old project (Objc one) the library, but i notice that the generated interface didn't show all the methods ( the ones at the extensions).

Basically I invoke the method updateProgress

Dot Appears every time updateProgress is called.

I've added a RPCircularProgress to my view controller via storyboard, and in the view controller's class, I call updateProgress, a white dot appears on the screen. The dot actually moves with the bar as it fills up.
I'm using the Swift 2.3 version with the AnimationDelegate commented out as CAAnimation isn't supported by Swift 2.1.

High CPU animating static value after updating progress

Updating progress updateProgress(1.0) calls animate() eventually leading to progressLayer.add(animation, forKey: AnimationKeys.progress)

This leads to high CPU use due system calling draw() repeatedly even after the animation has finished and the progress is set to the final value.

Setting animation.isRemovedOnCompletion = true fixes the issue at my end. Another work around is setting a completion handler and calling updateProgress(1.0, animated: false, ...) to kill the animation, which is not ideal.

I'm unaware of any broader issues setting isRemovedOnCompletion so leaving this as an issue rather than pull request.

Question: Start Progress

Is there currently an easy way to start the progress animation from lets say .3 to the updated progress?

I am able to get this functionality from changing the current progress in updateProgress to something other than 0 but I figured that I would ask to see if there is better way to do this

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.