Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 6ff11e7294
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 127 lines (94 sloc) 3.055 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
//
// SSPieProgressView.m
// SSToolkit
//
// Created by Sam Soffes on 4/22/10.
// Copyright 2010-2011 Sam Soffes. All rights reserved.
//

#import "SSPieProgressView.h"
#import "SSDrawingUtilities.h"

CGFloat const kAngleOffset = -90.0f;

@interface SSPieProgressView ()
- (void)_initialize;
@end

@implementation SSPieProgressView

#pragma mark - Accessors

@synthesize progress = _progress;
@synthesize pieBorderWidth = _pieBorderWidth;
@synthesize pieBorderColor = _pieBorderColor;
@synthesize pieFillColor = _pieFillColor;
@synthesize pieBackgroundColor = _pieBackgroundColor;

- (void)setProgress:(CGFloat)newProgress {
_progress = fmaxf(0.0f, fminf(1.0f, newProgress));
[self setNeedsDisplay];
}


- (void)setPieBorderWidth:(CGFloat)pieBorderWidth {
_pieBorderWidth = pieBorderWidth;
[self setNeedsDisplay];
}


- (void)setPieBorderColor:(UIColor *)pieBorderColor {
_pieBorderColor = pieBorderColor;
[self setNeedsDisplay];
}

- (void)setPieFillColor:(UIColor *)pieFillColor {
_pieFillColor = pieFillColor;
[self setNeedsDisplay];
}


- (void)setPieBackgroundColor:(UIColor *)pieBackgroundColor {
_pieBackgroundColor = pieBackgroundColor;
[self setNeedsDisplay];
}


#pragma mark - Class Methods

+ (UIColor *)defaultPieColor {
return [UIColor colorWithRed:0.612f green:0.710f blue:0.839f alpha:1.0f];
}


#pragma mark - UIView

- (id)initWithCoder:(NSCoder *)aDecoder {
    if ((self = [super initWithCoder:aDecoder])) {
[self _initialize];
    }
    return self;
}


- (id)initWithFrame:(CGRect)aFrame {
    if ((self = [super initWithFrame:aFrame])) {
[self _initialize];
    }
    return self;
}


- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClipToRect(context, rect);

// Background
[_pieBackgroundColor set];
CGContextFillEllipseInRect(context, rect);

// Fill
[_pieFillColor set];
if (_progress > 0.0f) {
CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
CGFloat radius = center.y;
CGFloat angle = DEGREES_TO_RADIANS((360.0f * _progress) + kAngleOffset);
CGPoint points[3] = {
CGPointMake(center.x, 0.0f),
center,
CGPointMake(center.x + radius * cosf(angle), center.y + radius * sinf(angle))
};
CGContextAddLines(context, points, sizeof(points) / sizeof(points[0]));
CGContextAddArc(context, center.x, center.y, radius, DEGREES_TO_RADIANS(kAngleOffset), angle, false);
CGContextDrawPath(context, kCGPathEOFill);
}

// Border
[_pieBorderColor set];
CGContextSetLineWidth(context, _pieBorderWidth);
CGRect pieInnerRect = CGRectMake(_pieBorderWidth / 2.0f, _pieBorderWidth / 2.0f, rect.size.width - _pieBorderWidth, rect.size.height - _pieBorderWidth);
CGContextStrokeEllipseInRect(context, pieInnerRect);
}


#pragma mark - Private

- (void)_initialize {
self.backgroundColor = [UIColor clearColor];

self.progress = 0.0f;
self.pieBorderWidth = 2.0f;
self.pieBorderColor = [[self class] defaultPieColor];
self.pieFillColor = self.pieBorderColor;
self.pieBackgroundColor = [UIColor whiteColor];
}

@end
Something went wrong with that request. Please try again.