2012-02-23 14 views
6

を描画するCGContextを使用して、私はCGContextを使用して線を描きたかったと私は今のところ持っていることは次のとおりです。ライン

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor); 
CGContextSetLineWidth(context, 1.0f); 
CGContextMoveToPoint(context, 10, 10); 
CGContextAddLineToPoint(context, 100, 50); 
CGContextStrokePath(context); 

それは常にトップ右下隅に左上隅から描画します。この行の開始点と終了点をどのように調整できますか?行の長さを調整するにはどうすればよいですか?

答えて

4

この2行は、開始点と終了点を担当している:

CGContextMoveToPoint(context, 10, 10); // This sets up the start point 
CGContextAddLineToPoint(context, 100, 50); // This moves to the end point. 

これら二つのxを調整することにより、yのポイントあなたがラインを調整することができます。行の長さは開始点と終了点によって異なります。

続いて、psoftの回答から、パスの作成とストロークを含む基本的なexample projectの図があります。

詳細は、pathsのQuartz 2Dガイドのサンプルコードを参照してください。

7

CoreGraphics == Good Times。

私は何もしなかったので、しばらくしてきました。私が最近しているのは、作図作業に先立ってすべてを構築することです。 Logoから暗黙の 'カーソル'があり、描画操作を行わずに移動することはできますが、指定する必要があります。私は良いアプローチ(少なくとも静的な数字の場合)は、最初に描画しなければならないパスを作成し、塗りつぶし、ストローク、シェーディングなどのパスを繰り返し使用することだと思います。

CGColorRef fillColor = // yadda 
    CGColorRef strokeColor = // yadda 

    const CGFloat radius = 5.0; 

    // Create the path first - rounded rectangle 
    CGMutablePathRef path = CGPathCreateMutable(); 
    CGPathMoveToPoint(path, NULL, 100.0 - radius, 10.0); 
    CGPathAddLineToPoint(path, NULL, 10.0 + radius, 10.0); 
    CGPathAddArcToPoint(path, NULL, 10.0, 10.0, 10.0, 10.0 + radius, radius); 
    CGPathAddLineToPoint(path, NULL, 10.0, 100.0 - radius); 
    CGPathAddArcToPoint(path, NULL, 10.0, 100.0, 10.0 + radius, 100.0, radius); 
    CGPathAddLineToPoint(path, NULL, 100.0 - radius, 100.0); 
    CGPathAddArcToPoint(path, NULL, 100.0, 100.0, 100.0, 100.0 - radius, radius); 
    CGPathAddLineToPoint(path, NULL, 100.0, 10.0 + radius); 
    CGPathAddArcToPoint(path, NULL, 100.0, 10.0, 100.0 - radius, 10.0, radius); 
    CGPathCloseSubpath(path); 

    // Then use it in your draw commands 
    CGContextSetStrokeColor(context, CGColorGetComponents(strokeColor)); 
    CGContextSetFillColor(context, CGColorGetComponents(fillColor)); 
    CGContextSetLineJoin(context, kCGLineJoinMiter); 
    CGContextSetLineWidth(context, strokeWidth); 

    CGContextAddPath(context, path); 
    CGContextDrawPath(context, kCGPathFillStroke); 
    CGPathRelease(path); 

など必要に応じて最後のパスを解放したり、後で使用するために参照を保存したりできます。

+1

ご利用いただきありがとうございます。私がCGPathAddArcToPointを必要とするたびに、私は事実を理解することにつながりませんでした。 Appleのドキュメントでは値の端点を呼び出していますが、図3.5では接線点について説明しています。あなたの最初のパラメータ(10,10)が何をしていたのかを紙にプロットすることによって、それは本質的にコーナーポイントであるか、または2次ベジェ曲線の点でコントロールポイントであることが分かります。作業中のシェイプを理解することで、歪んだ矩形から素敵な丸い四角形に変わったことを確認しています。 – tobinjim

+0

サービスのご利用をお待ちしております – QED

+1

CGPathRelease(path)は必要ありません。最後に? –