Рисовать квадраты с помощью Core Graphics или включать pngs? - PullRequest
1 голос
/ 26 июля 2011

Я создаю легенду для графика, который в основном будет выглядеть так:

[ ] Line 1
[ ] Line 2
[ ] Line 3

Поля слева должны быть того же цвета, что и линии на графике.

В любом случае, все, что мне нужно знать, это то, быстрее ли будет рисовать прямоугольники с Core Graphics или просто сделать несколько png-файлов с GIMP для квадратов и включить их.

Ответы [ 4 ]

7 голосов
/ 26 июля 2011

Используйте UIView для каждой легенды и установите цвет фона на нужный вам цвет.

1 голос
/ 27 июля 2011

Оба подхода достаточно быстры, чтобы не иметь значения. Тем не менее, использование Core Graphics имеет то преимущество, что вы намного более гибки, например, когда позже вы решите, что вам нужны дополнительные цвета. Кроме того, ваше приложение будет меньше, потому что вам не нужно включать файлы PNG.

0 голосов
/ 27 июля 2011

В iOS Core Graphics довольно прост в использовании. В методе drawRect: вашего представления просто сделайте это, чтобы нарисовать квадрат:

- (void)drawRect:(CGRect)frame {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 0.5, 0.5, 0.5, 1); // gray
    CGContextFillRect(context, CGRectMake(10, 10, 20, 20)); // our rect is {10,10,20,20)
    // draw a line
    CGContextSetRGBStrokeColor(context, 1, 0, 0, 1);
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, startX, startY);
    CGContextAddLineToPoint(context, endX, endY);
    CGContextStrokePath(context);
}

Надеюсь, это поможет!

0 голосов
/ 26 июля 2011

Рисование коробок совсем несложно!Я буду использовать Core Graphics каждый день, особенно если вы получаете поддержку сетчатки бесплатно.

Как видно из этого примера, вы можете сделать это, используя только классы UIKit:

// Setup colors
[myBoxColor setFill];
[myBoxBorderColor set];
// Setup a path for the box
UIBezierPath* path = [UIBezierBath bezierPathWithRect:rectOfTheBox];
path.lineWidth = 2;
// Draw!
[path fill];
[path stroke];

Одно предупреждение;обводка заливки с использованием краев пути в качестве центра линии.Таким образом, вы получите размытую линию, если обведите контур с целочисленным прямоугольником с шириной линии в 1 точку.

Это можно исправить, если вы хотите, чтобы линия границы в 1 точку выполнялась примерно так:

CGRect strokeRect = UIEdgeInsetsInsetRect(rectOfTheBox, 
                                          UIEdgeInsetsMake(0.5f,0.5f,0.5f,0.5f));
UIBezierPath* path = [UIBezierPath bezierPathWithRect:strokeRect];
[path stroke];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...