Нарисуйте линии и закрасьте мелом текстуру в приложении для iPhone - PullRequest
0 голосов
/ 13 ноября 2010

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

Вот выдержки из существующего кода для каждой области:

Рисование круга вокруг круговой диаграммы:

CGContextRef ctx = UIGraphicsGetCurrentContext();

CGContextSetRGBStrokeColor(ctx, 1.0, 1.0, 1.0, 1.0);
CGContextSetLineWidth(ctx, 8.0);

// Draw a thin line around the circle
CGContextAddArc(ctx, x, y, r, 0.0, 360.0*M_PI/180.0, 0);
CGContextClosePath(ctx);
CGContextDrawPath(ctx, kCGPathStroke);

... и рисование отрезка пирога:

CGContextSetRGBStrokeColor(ctx, 1.0, 1.0, 1.0, 1.0);
            CGContextSetLineWidth(ctx, 8.0);
            CGContextMoveToPoint(ctx, x, y);
            CGContextAddArc(ctx, x, y, r, (startDeg-90)*M_PI/180.0, (endDeg-90)*M_PI/180.0, 0);
            CGContextClosePath(ctx);
            CGContextDrawPath(ctx, kCGPathStroke);

... затем заполняя его цветной заливкой:

CGContextSetRGBFillColor(ctx, color.red, color.green, color.blue, color.alpha );
            CGContextMoveToPoint(ctx, x, y);
            CGContextAddArc(ctx, x, y, r, (startDeg-90)*M_PI/180.0, (endDeg-90)*M_PI/180.0, 0);
            CGContextClosePath(ctx);
            CGContextFillPath(ctx);

Игнорируя тот факт, что я не вставил в объявления переменных многие используемые переменные, я надеюсь, что код довольно понятен.

Теперь: как я могу изменить код, чтобы использовать текстуру для фактического рисования линий / дуг?

Аналогично, как я могу использовать текстурную заливку вместо цветовой заливки?

Я пытаюсь закончить это приложение, и это мой последний камень преткновения. Другие вопросы о SO и других местах в Интернете, похоже, не отвечают на вопрос так, как я могу следовать.

Любая помощь будет принята с благодарностью!

Роберт

1 Ответ

4 голосов
/ 27 апреля 2011

Знайте, что это устарело, но можно установить шаблоны заливки или обводки, используя этот простой фрагмент кода:

  // Somewhere in initialization code.
  UIColor *pattern = [UIColor colorWithPatternImage:[UIImage imageNamed:@"pattern.png"]];
  CGColorRef fillColor = [pattern CGColor];
  CGColorRef strokeColor = [pattern CGColor];

  // Probably in |draw| method call.
  CGContextSetStrokeColorWithColor(context, strokeColor);
  CGContextSetFillColorWithColor(context, fillColor);

Надеюсь, это кому-нибудь поможет.Есть и другие замечательные расширенные возможности - вы можете манипулировать шаблонами разными способами: сдвигать, масштабировать, вращать, использовать цветные или трафаретные рисунки и многое другое, но для этого нужно глубоко копаться в API документации.

...