2011-01-21 2 views
0

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

- (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(); 
} 

ответ

0

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

Смежные вопросы