Эффект тиснения в Core Graphics - PullRequest
8 голосов
/ 27 февраля 2012

Я снова здесь с двумя Вопросами, оба взаимосвязаны

  1. Я хочу нарисовать рельефные линии с основной графикой.Кто-нибудь может подсказать, как придать внутренним теням линию, нарисованную на сенсорных событиях?
  2. Даже для рисования внешних теней.Нарисованные тени перекрываются между ними.и линия, нарисованная цветами, отличными от черного, похожа на червя. Кто-нибудь может мне помочь?Следующее изображение иллюстрирует то, что я хочу объяснить для Вопроса 2: enter image description here Тени создают не ровно.Они темнеют в некоторых точках

Я добавляю код, который использую для рисования линий ..

    for (int i=0; i<[currentPath count]; i++) 
    {
        CGPoint mid1 = [[self midPoint:[currentPath objectAtIndex:i+1]  :[currentPath objectAtIndex:i]] CGPointValue]; 
        CGPoint mid2 = [[self midPoint:[currentPath objectAtIndex:i+2] :[currentPath objectAtIndex:i+1]] CGPointValue];
        CGContextMoveToPoint(context, mid1.x, mid1.y);
        CGContextAddQuadCurveToPoint(context, [[currentPath objectAtIndex:i+1] CGPointValue].x, [[currentPath objectAtIndex:i+1] CGPointValue].y, mid2.x, mid2.y); 
        CGContextSetShadow(context, CGSizeMake(-2, -2), 3);

        CGContextSetLineCap(context, kCGLineCapRound);
        CGContextSetStrokeColorWithColor(context,[color CGColor]);              
        CGContextSetLineWidth(context, linewidth);              
        CGContextStrokePath(context);
        i+=2;
    }

Ответы [ 3 ]

4 голосов
/ 28 февраля 2012

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

CGContextStrokePath(context);

Эта строка выходит за пределы цикла. И все теперь работает нормально :)

3 голосов
/ 28 февраля 2012

Для ваших перекрывающихся теней вы хотите, чтобы слой прозрачности сначала компоновал их.См. Слои прозрачности в Руководстве по программированию в Quartz 2D.

0 голосов
/ 27 февраля 2012

Похоже, вы рисуете путь, используя серию кругов.

Проблема в том, что вы установили тень на отдельные точки, и именно поэтому вы получаете странные эффекты.

Возможное решение - не кладите тень на точки, нарисуйте путь: продублируйте нарисованную линию, нарисуйте ее другим цветом, сместите ее и поместите под фактическую линию.

В качестве альтернативы, если вы используете слои - взгляните на пути тени.

...