Craig McLeod

Added additional initWithFrame methods to allow for choice of shadowColor, displ…

…ayCountingLabel BOOL and overrideLineWidth option.

Also change the UIBezierPath radius calculation so circle uses the full frame space allotted.
@@ -29,6 +29,30 @@ typedef NS_ENUM (NSUInteger, PNChartFormatType) { @@ -29,6 +29,30 @@ typedef NS_ENUM (NSUInteger, PNChartFormatType) {
29 clockwise:(BOOL)clockwise 29 clockwise:(BOOL)clockwise
30 shadow:(BOOL)hasBackgroundShadow; 30 shadow:(BOOL)hasBackgroundShadow;
31 31
  32 +- (id)initWithFrame:(CGRect)frame
  33 + total:(NSNumber *)total
  34 + current:(NSNumber *)current
  35 + clockwise:(BOOL)clockwise
  36 + shadow:(BOOL)hasBackgroundShadow
  37 + shadowColor:(UIColor *)backgroundShadowColor;
  38 +
  39 +- (id)initWithFrame:(CGRect)frame
  40 + total:(NSNumber *)total
  41 + current:(NSNumber *)current
  42 + clockwise:(BOOL)clockwise
  43 + shadow:(BOOL)hasBackgroundShadow
  44 + shadowColor:(UIColor *)backgroundShadowColor
  45 +displayCountingLabel:(BOOL)displayCountingLabel;
  46 +
  47 +- (id)initWithFrame:(CGRect)frame
  48 + total:(NSNumber *)total
  49 + current:(NSNumber *)current
  50 + clockwise:(BOOL)clockwise
  51 + shadow:(BOOL)hasBackgroundShadow
  52 + shadowColor:(UIColor *)backgroundShadowColor
  53 +displayCountingLabel:(BOOL)displayCountingLabel
  54 + overrideLineWidth:(NSNumber *)overrideLineWidth;
  55 +
32 @property (strong, nonatomic) UICountingLabel *countingLabel; 56 @property (strong, nonatomic) UICountingLabel *countingLabel;
33 @property (nonatomic) UIColor *strokeColor; 57 @property (nonatomic) UIColor *strokeColor;
34 @property (nonatomic) UIColor *strokeColorGradientStart; 58 @property (nonatomic) UIColor *strokeColorGradientStart;
@@ -43,4 +67,6 @@ typedef NS_ENUM (NSUInteger, PNChartFormatType) { @@ -43,4 +67,6 @@ typedef NS_ENUM (NSUInteger, PNChartFormatType) {
43 @property (nonatomic) CAShapeLayer *gradientMask; 67 @property (nonatomic) CAShapeLayer *gradientMask;
44 @property (nonatomic) CAShapeLayer *circleBackground; 68 @property (nonatomic) CAShapeLayer *circleBackground;
45 69
  70 +@property (nonatomic) BOOL displayCountingLabel;
  71 +
46 @end 72 @end
@@ -13,12 +13,53 @@ @@ -13,12 +13,53 @@
13 13
14 @implementation PNCircleChart 14 @implementation PNCircleChart
15 15
  16 +- (id)initWithFrame:(CGRect)frame total:(NSNumber *)total current:(NSNumber *)current clockwise:(BOOL)clockwise shadow:(BOOL)hasBackgroundShadow {
  17 +
  18 + return [self initWithFrame:frame
  19 + total:total
  20 + current:current
  21 + clockwise:clockwise
  22 + shadow:shadow
  23 + shadowColor:PNGreen
  24 + displayCountingLabel:YES
  25 + overrideLineWidth:@8.0f];
  26 +
  27 +}
  28 +
  29 +- (id)initWithFrame:(CGRect)frame total:(NSNumber *)total current:(NSNumber *)current clockwise:(BOOL)clockwise shadow:(BOOL)hasBackgroundShadow shadowColor:(UIColor *)backgroundShadowColor {
  30 +
  31 + return [self initWithFrame:frame
  32 + total:total
  33 + current:current
  34 + clockwise:clockwise
  35 + shadow:shadow
  36 + shadowColor:backgroundShadowColor
  37 + displayCountingLabel:YES
  38 + overrideLineWidth:@8.0f];
  39 +
  40 +}
  41 +
  42 +- (id)initWithFrame:(CGRect)frame total:(NSNumber *)total current:(NSNumber *)current clockwise:(BOOL)clockwise shadow:(BOOL)hasBackgroundShadow shadowColor:(UIColor *)backgroundShadowColor displayCountingLabel:(BOOL)displayCountingLabel {
  43 +
  44 + return [self initWithFrame:frame
  45 + total:total
  46 + current:current
  47 + clockwise:clockwise
  48 + shadow:shadow
  49 + shadowColor:PNGreen
  50 + displayCountingLabel:displayCountingLabel
  51 + overrideLineWidth:@8.0f];
  52 +
  53 +}
16 54
17 - (id)initWithFrame:(CGRect)frame 55 - (id)initWithFrame:(CGRect)frame
18 total:(NSNumber *)total 56 total:(NSNumber *)total
19 current:(NSNumber *)current 57 current:(NSNumber *)current
20 clockwise:(BOOL)clockwise 58 clockwise:(BOOL)clockwise
21 shadow:(BOOL)hasBackgroundShadow 59 shadow:(BOOL)hasBackgroundShadow
  60 + shadowColor:(UIColor *)backgroundShadowColor
  61 +displayCountingLabel:(BOOL)displayCountingLabel
  62 + overrideLineWidth:(NSNumber *)overrideLineWidth
22 { 63 {
23 self = [super initWithFrame:frame]; 64 self = [super initWithFrame:frame];
24 65
@@ -29,12 +70,15 @@ @@ -29,12 +70,15 @@
29 _duration = 1.0; 70 _duration = 1.0;
30 _chartType = PNChartFormatTypePercent; 71 _chartType = PNChartFormatTypePercent;
31 72
  73 + _displayCountingLabel = displayCountingLabel;
  74 +
32 CGFloat startAngle = clockwise ? -90.0f : 270.0f; 75 CGFloat startAngle = clockwise ? -90.0f : 270.0f;
33 CGFloat endAngle = clockwise ? -90.01f : 270.01f; 76 CGFloat endAngle = clockwise ? -90.01f : 270.01f;
34 77
35 - _lineWidth = @8.0f; 78 + _lineWidth = overrideLineWidth;
  79 +
36 UIBezierPath *circlePath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.bounds.size.width/2.0f, self.bounds.size.height/2.0f) 80 UIBezierPath *circlePath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.bounds.size.width/2.0f, self.bounds.size.height/2.0f)
37 - radius:(self.frame.size.height * 0.5) - [_lineWidth floatValue] 81 + radius:(self.frame.size.height * 0.5) - ([_lineWidth floatValue]/2.0f)
38 startAngle:DEGREES_TO_RADIANS(startAngle) 82 startAngle:DEGREES_TO_RADIANS(startAngle)
39 endAngle:DEGREES_TO_RADIANS(endAngle) 83 endAngle:DEGREES_TO_RADIANS(endAngle)
40 clockwise:clockwise]; 84 clockwise:clockwise];
@@ -51,7 +95,7 @@ @@ -51,7 +95,7 @@
51 _circleBackground.lineCap = kCALineCapRound; 95 _circleBackground.lineCap = kCALineCapRound;
52 _circleBackground.fillColor = [UIColor clearColor].CGColor; 96 _circleBackground.fillColor = [UIColor clearColor].CGColor;
53 _circleBackground.lineWidth = [_lineWidth floatValue]; 97 _circleBackground.lineWidth = [_lineWidth floatValue];
54 - _circleBackground.strokeColor = (hasBackgroundShadow ? PNLightYellow.CGColor : [UIColor clearColor].CGColor); 98 + _circleBackground.strokeColor = (hasBackgroundShadow ? backgroundShadowColor.CGColor : [UIColor clearColor].CGColor);
55 _circleBackground.strokeEnd = 1.0; 99 _circleBackground.strokeEnd = 1.0;
56 _circleBackground.zPosition = -1; 100 _circleBackground.zPosition = -1;
57 101
@@ -65,7 +109,9 @@ @@ -65,7 +109,9 @@
65 [_countingLabel setBackgroundColor:[UIColor clearColor]]; 109 [_countingLabel setBackgroundColor:[UIColor clearColor]];
66 [_countingLabel setCenter:CGPointMake(self.center.x, self.center.y)]; 110 [_countingLabel setCenter:CGPointMake(self.center.x, self.center.y)];
67 _countingLabel.method = UILabelCountingMethodEaseInOut; 111 _countingLabel.method = UILabelCountingMethodEaseInOut;
68 - [self addSubview:_countingLabel];; 112 + if (_displayCountingLabel) {
  113 + [self addSubview:_countingLabel];
  114 + }
69 } 115 }
70 116
71 return self; 117 return self;
@@ -76,6 +122,7 @@ @@ -76,6 +122,7 @@
76 { 122 {
77 // Add counting label 123 // Add counting label
78 124
  125 + if (_displayCountingLabel) {
79 NSString *format; 126 NSString *format;
80 switch (self.chartType) { 127 switch (self.chartType) {
81 case PNChartFormatTypePercent: 128 case PNChartFormatTypePercent:
@@ -91,6 +138,7 @@ @@ -91,6 +138,7 @@
91 } 138 }
92 self.countingLabel.format = format; 139 self.countingLabel.format = format;
93 [self addSubview:self.countingLabel]; 140 [self addSubview:self.countingLabel];
  141 + }
94 142
95 143
96 // Add circle params 144 // Add circle params
@@ -172,7 +220,10 @@ @@ -172,7 +220,10 @@
172 } 220 }
173 [_circle addAnimation:pathAnimation forKey:@"strokeEndAnimation"]; 221 [_circle addAnimation:pathAnimation forKey:@"strokeEndAnimation"];
174 222
  223 + if (_displayCountingLabel) {
175 [self.countingLabel countFrom:fmin([_current floatValue], [_total floatValue]) to:fmin([current floatValue], [_total floatValue]) withDuration:self.duration]; 224 [self.countingLabel countFrom:fmin([_current floatValue], [_total floatValue]) to:fmin([current floatValue], [_total floatValue]) withDuration:self.duration];
  225 + }
  226 +
176 _current = current; 227 _current = current;
177 } 228 }
178 229