Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions XYPieChart/XYPieChart.m
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ - (void)createArcAnimationForKey:(NSString *)key fromValue:(NSNumber *)from toVa
}
@end

@interface XYPieChart (Private)
@interface XYPieChart (Private)
- (void)updateLayers;
- (void)updateTimerFired:(NSTimer *)timer;
- (SliceLayer *)createSliceLayer;
- (CGSize)sizeThatFitsString:(NSString *)string;
Expand Down Expand Up @@ -238,7 +239,7 @@ - (void)setShowPercentage:(BOOL)showPercentage
label = [NSString stringWithFormat:@"%0.0f", layer.percentage*100];
else
label = (layer.text)?layer.text:[NSString stringWithFormat:@"%0.0f", layer.value];
CGSize size = [label sizeWithFont:self.labelFont];
CGSize size = [label sizeWithAttributes:@{NSFontAttributeName:self.labelFont}];

if(M_PI*2*_labelRadius*layer.percentage < MAX(size.width,size.height))
{
Expand Down Expand Up @@ -427,33 +428,38 @@ - (void)reloadData

#pragma mark - Animation Delegate + Run Loop Timer

- (void)updateTimerFired:(NSTimer *)timer;
{
- (void)updateLayers
{
CALayer *parentLayer = [_pieView layer];
NSArray *pieLayers = [parentLayer sublayers];

[pieLayers enumerateObjectsUsingBlock:^(CAShapeLayer * obj, NSUInteger idx, BOOL *stop) {

NSNumber *presentationLayerStartAngle = [[obj presentationLayer] valueForKey:@"startAngle"];
CGFloat interpolatedStartAngle = [presentationLayerStartAngle doubleValue];

NSNumber *presentationLayerEndAngle = [[obj presentationLayer] valueForKey:@"endAngle"];
CGFloat interpolatedEndAngle = [presentationLayerEndAngle doubleValue];

CGPathRef path = CGPathCreateArc(_pieCenter, _pieRadius, interpolatedStartAngle, interpolatedEndAngle);
[obj setPath:path];
CFRelease(path);

{
CALayer *labelLayer = [[obj sublayers] objectAtIndex:0];
CGFloat interpolatedMidAngle = (interpolatedEndAngle + interpolatedStartAngle) / 2;
CGFloat interpolatedMidAngle = (interpolatedEndAngle + interpolatedStartAngle) / 2;
[CATransaction setDisableActions:YES];
[labelLayer setPosition:CGPointMake(_pieCenter.x + (_labelRadius * cos(interpolatedMidAngle)), _pieCenter.y + (_labelRadius * sin(interpolatedMidAngle)))];
[CATransaction setDisableActions:NO];
}
}];
}

- (void)updateTimerFired:(NSTimer *)timer
{
[self updateLayers];
}

- (void)animationDidStart:(CAAnimation *)anim
{
if (_animationTimer == nil) {
Expand All @@ -473,6 +479,8 @@ - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)animationCompleted
[_animations removeObject:anim];

if ([_animations count] == 0) {
[self updateLayers];

[_animationTimer invalidate];
_animationTimer = nil;
}
Expand Down Expand Up @@ -640,7 +648,7 @@ - (SliceLayer *)createSliceLayer
[textLayer setShadowOpacity:1.0f];
[textLayer setShadowRadius:2.0f];
}
CGSize size = [@"0" sizeWithFont:self.labelFont];
CGSize size = [@"0" sizeWithAttributes:@{NSFontAttributeName:self.labelFont}];
[CATransaction setDisableActions:YES];
[textLayer setFrame:CGRectMake(0, 0, size.width, size.height)];
[textLayer setPosition:CGPointMake(_pieCenter.x + (_labelRadius * cos(0)), _pieCenter.y + (_labelRadius * sin(0)))];
Expand All @@ -660,7 +668,7 @@ - (void)updateLabelForLayer:(SliceLayer *)pieLayer value:(CGFloat)value
else
label = (pieLayer.text)?pieLayer.text:[NSString stringWithFormat:@"%0.0f", value];

CGSize size = [label sizeWithFont:self.labelFont];
CGSize size = [label sizeWithAttributes:@{NSFontAttributeName:self.labelFont}];

[CATransaction setDisableActions:YES];
if(M_PI*2*_labelRadius*pieLayer.percentage < MAX(size.width,size.height) || value <= 0)
Expand Down