TowerMadness - новый уровень в жанре Tower Defence BeatRider - загружай и играй
Май 29

3288079379_da758c4fd9_tПредлагаю один из способов построения круговой диаграммы с помощью последней версии iPhone SDK. Оговорюсь сразу, что авторитетным источником информации по программированию себя не считаю. Тем не менее, предлагаю класс, который поможет в создании векторной графики с использованием UIKit и Quartz.

Пример диаграммы, созданной с помощью данного кода, ниже:

3288079379_da758c4fd91

Теперь собственно код:
GraphView.h

1
2
3
4
5
6
7
8
9
10
11
#(nothing to see here)
#

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface GraphView : UIView {

}

@end

GraphView.m

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
#import "GraphView.h"

#define PI 3.14159265358979323846
static inline float radians(double degrees) { return degrees * PI / 180; }

@implementation GraphView

- (void)drawRect:(CGRect)rect {

CGRect parentViewBounds = self.bounds;
CGFloat x = CGRectGetWidth(parentViewBounds)/2;
CGFloat y = CGRectGetHeight(parentViewBounds)*0.55;

// Получаем графический контекст и очищаем
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextClearRect(ctx, rect);

// указываем цвет заливки
CGContextSetRGBStrokeColor(ctx, 1, 1, 1, 1.0);

// указываем толщину линий
CGContextSetLineWidth(ctx, 4.0);

// значения для выстраивания круговой диаграммы

double snapshotCapacity =20;
double rawCapacity = 100;
double systemCapacity = 1;

int offset = 5;
double pie1_start = 315.0;
double pie1_finish = snapshotCapacity *360.0/rawCapacity;
double system_finish = systemCapacity*360.0/rawCapacity;

CGContextSetFillColor(ctx, CGColorGetComponents( [[UIColor greenColor] CGColor]));
CGContextMoveToPoint(ctx, x+2*offset, y);
CGContextAddArc(ctx, x+2*offset, y, 100,  radians(snapshot_start), radians(snapshot_start+snapshot_finish), 0);
CGContextClosePath(ctx);
CGContextFillPath(ctx);

// объем системы
CGContextSetFillColor(ctx, CGColorGetComponents( [[UIColor colorWithRed:15 green:165/255 blue:0 alpha:1 ] CGColor]));
CGContextMoveToPoint(ctx, x+offset,y);
CGContextAddArc(ctx, x+offset, y, 100,  radians(snapshot_start+snapshot_finish+offset), radians(snapshot_start+snapshot_finish+system_finish), 0);
CGContextClosePath(ctx);
CGContextFillPath(ctx);

/* объем данных */
CGContextSetFillColor(ctx, CGColorGetComponents( [[UIColor colorWithRed:99/255 green:184/255 blue:255/255 alpha:1 ] CGColor]));
CGContextMoveToPoint(ctx, x, y);
CGContextAddArc(ctx, x, y, 100,  radians(snapshot_start+snapshot_finish+system_finish+offset), radians(snapshot_start), 0);
CGContextClosePath(ctx);
CGContextFillPath(ctx);
}

Ряд переменных в коде (например, “snapshot_start“) представляет собой отсутствующие значения, поскольку код — фрагмент большой программы, над которой я сейчас работаю.

Текст оригинальной статьи на английском языке [здесь]

Уважаемые читатели, данный материал был переведен и подготовлен к публикации проектом LookApp.ru, при публикации на другом сайте ссылка на LookApp.ru обязательна.

1 звезда2 звезд3 звезд4 звезд5 звезд (1 голосов, средний: 4.00 из 5)
Загрузка ... Загрузка ...


2 Responses to “Уроки iPhone SDK: Построение круговых диаграмм в приложениях”

  1. 1. Almonah Says:

    Огромная благодарность за урок! И пожелание - лично я был бы очень благодарен за подобное разьяснение по построению простых графиков (x - y).

  2. 2. Artem Says:

    Привет. Есть вот такой урок http://lookapp.ru/2009/05/29/iphone-sdk-tutorials37/
    Он очень маленький но про графики. Посмотрите может поможет. Если найду что-то лучше то это сразу будет на сайте. Для поиска уроков юзайте бар поиска вверху страницы.

Оставьте комментарий