Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone CG绘制子路径时更改/保存上下文_Iphone_Ios_Core Graphics - Fatal编程技术网

Iphone CG绘制子路径时更改/保存上下文

Iphone CG绘制子路径时更改/保存上下文,iphone,ios,core-graphics,Iphone,Ios,Core Graphics,如果我正在做一个简单的绘图,并且我想更改某些子路径的线宽/破折号,如何在不更改所有路径的情况下实现这一点?我尝试了一些使用CGContextSaveGStatecontext的变体;但我不能完全正确。这必须是完全不同的路径吗?我真的不想让他们看起来被阴影所覆盖 - (void)drawPitch:(CGContextRef)context { // Push the context onto the stack UIGraphicsPushContext(context);

如果我正在做一个简单的绘图,并且我想更改某些子路径的线宽/破折号,如何在不更改所有路径的情况下实现这一点?我尝试了一些使用CGContextSaveGStatecontext的变体;但我不能完全正确。这必须是完全不同的路径吗?我真的不想让他们看起来被阴影所覆盖

- (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();
}
对CGContextSetLineWidth的调用仅影响对CGContextStrokePath的调用。路径仅包含每个线段的坐标和类型,不包含有关线宽、图案或其他任何信息。如果需要使用不同的线宽绘制每个段,则需要使用单独的路径分别调用CGContextStrokePath