BLCircularProgress is a customizable circular progress with built-in interactive functionality. It based on PICircularProgressView but provides more flexible properties with controllable interface.
BLCircularProgress allows user to update progress natively via touching. And there are (3 * 7 + 1) animation approaches can be chosen to update current progress.
Swift Version: BLCircularProgress-Swift
@property (nonatomic) CGFloat maxProgress UI_APPEARANCE_SELECTOR; // Max value of progress
@property (nonatomic) CGFloat minProgress UI_APPEARANCE_SELECTOR; // Min value of progress
@property (nonatomic) CGFloat maximaProgress UI_APPEARANCE_SELECTOR; // Maxima value of progress, smaller than or equal to maxProgress
@property (nonatomic) CGFloat minimaProgress UI_APPEARANCE_SELECTOR; // Minima value of progress, larger than or equal to minProgress@property (nonatomic) NSInteger clockwise UI_APPEARANCE_SELECTOR; // Whether cloackwiseUI_APPEARANCE_SELECTOR doesn't support BOOL before iOS 8
@property (nonatomic) CGFloat startAngle UI_APPEARANCE_SELECTOR; // Start angle value, will be flipped as angle larger than or equal to 0, smaller than 360@property (nonatomic) CGFloat thicknessRadio UI_APPEARANCE_SELECTOR; // Represent the scale percentage of circle width and radius, e.g. radius * thicknessRadio = circle width@property (nonatomic) CGFloat progressAnimationDuration UI_APPEARANCE_SELECTOR; // Duration while update progress with animation@property (nonatomic) AnimationAlgorithm animationAlgorithm UI_APPEARANCE_SELECTOR; // Different calculation algorithm animationSeven options for animation approaches as below:
typedef NS_ENUM(NSInteger, AnimationAlgorithm) {
AnimationAlgorithmSimpleLine,
AnimationAlgorithmQuadratic,
AnimationAlgorithmCubic,
AnimationAlgorithmQuartic,
AnimationAlgorithmQuintic,
AnimationAlgorithmSinusoidal,
AnimationAlgorithmExponential,
AnimationAlgorithmCircular
};@property (nonatomic) AnimationType animationType UI_APPEARANCE_SELECTOR; // Different animation type, ease in, ease out, and bothThree different animation type as below:
typedef NS_ENUM(NSInteger, AnimationType) {
AnimationTypeEaseIn,
AnimationTypeEaseOut,
AnimationTypeEaseInEaseOut
};The three options are the same for AnimationAlgorithmSimpleLine approaches.
@property (nonatomic) CGFloat touchResponseOuterShiftValue UI_APPEARANCE_SELECTOR; // Extend touching response scale from circle outer border
@property (nonatomic) CGFloat touchResponseInnerShiftValue UI_APPEARANCE_SELECTOR; // Extend touching response scale from circle inner border@property (nonatomic, strong) UIColor *progressFillColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *progressTopGradientColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *progressBottomGradientColor UI_APPEARANCE_SELECTOR;- (void)animateProgress:(CGFloat)newProgress completion:(void (^)(CGFloat))completion;Build-in update progress with animation, completion is the callback.
- (void)circularProgressView:(BLCircularProgressView *)circularProgressView didBeganTouchesWithProgress:(CGFloat)progress;
- (void)circularProgressView:(BLCircularProgressView *)circularProgressView didMovedTouchesWithProgress:(CGFloat)progress;
- (void)circularProgressView:(BLCircularProgressView *)circularProgressView didEndedTouchesWithProgress:(CGFloat)progress;
- (void)circularProgressView:(BLCircularProgressView *)circularProgressView didCancelledTouchesWithProgress:(CGFloat)progress;These 4 delegates provide the interface while user update progress via touching. They are corresponding to the touches event respectively as belows:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event###Animation Delegates
- (void)circularProgressView:(BLCircularProgressView *)circularProgressView didDuringAnimationWithProgress:(CGFloat)progress;
- (void)circularProgressView:(BLCircularProgressView *)circularProgressView didBeganAnimationWithProgress:(CGFloat)progress;
- (void)circularProgressView:(BLCircularProgressView *)circularProgressView didEndedAnimationWithProgress:(CGFloat)progress;The 3 delegates are fired while animateProgress:completion: is invoked. They are corresponding the before animation, animating, after animation respectively.
Note: From left to right are EaseInEaseOut, EaseIn, and EaseOut except Simple Linear
BLCircularProgress is available under the MIT license. See the LICENSE file for more info.





















