2011-01-21 8 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()を別々に呼び出す必要があります。

関連する問題