CG изменение / сохранение контекста при отрисовке подпути - PullRequest
0 голосов
/ 22 января 2011

Если я делаю простой рисунок и хочу изменить ширину линии / тире определенных вложенных путей, как я могу добиться этого, не меняя все пути?Я пробовал несколько вариантов, используя CGContextSaveGState (context);но не могу понять это правильно.Должны ли это быть совершенно разные пути?Я действительно хочу, чтобы они не выглядели закрашенными тенями.

- (void)drawPitch:(CGContextRef)context {

    // Push the context onto the stack
    UIGraphicsPushContext(context);

    //Reasonable defaults
    CGRect          pitchRect = CGRectMake(10, 10, 220, 344);
    CGSize          myShadowOffset = CGSizeMake(0,1);
    float           myColorValues[] = {0, 0, 0, 0.75};
    CGColorRef      myColor;
    CGColorSpaceRef myColorSpace;

    //Color Space
    myColorSpace = CGColorSpaceCreateDeviceRGB ();
    myColor = CGColorCreate (myColorSpace, myColorValues);

    // Set Stroke
    CGContextSetRGBStrokeColor(context, 1, 1, 1, 0.9);

    CGContextSetLineWidth(context, 4);

    // Pitch Outline at width:4
    CGContextAddRect(context, pitchRect);

    CGContextSaveGState(context);

    // Want this to be set width:2 just for the subpath
    CGContextSetLineWidth(context, 2);

    CGContextMoveToPoint(context, CGRectGetMinX(pitchRect), CGRectGetMinY(pitchRect) + (pitchRect.size.height * 0.50));
    CGContextAddLineToPoint(context, CGRectGetMaxX(pitchRect), CGRectGetMinY(pitchRect) + (pitchRect.size.height * 0.50));

    CGContextRestoreGState(context);


    // Set Line Shadow
    CGContextSetShadowWithColor(context, myShadowOffset, 10, myColor);


    // Stroke path
    CGContextStrokePath(context);


    // Pop the contect back on the stack
    UIGraphicsPopContext();
}

1 Ответ

0 голосов
/ 22 января 2011

Вызов на CGContextSetLineWidth() влияет только на звонок на CGContextStrokePath(). Путь содержит только координаты и типы каждого сегмента и не содержит информацию о ширине линии, шаблоне или чем-либо еще. Если вам нужно нарисовать каждый сегмент с разной шириной линии, то вам нужно использовать отдельные вызовы к CGContextStrokePath() с разными путями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...