2012-05-09 5 views
0

現在、CGContextRef上の特定の看板ネットワークを画面に描画するアプリケーションを作成しています。これまでのところすべてがうまくいっていますが、今私はこの問題を解決できない状況にあります:iOS:キャンバス上に動的に描画する(コンテキスト)

私はオブジェクトを動的に描画することを試みています。終点のx座標とy座標)。これらのシンボルで、私はラインの真ん中を見つけました。これがシンボルを描く場所です。この情報で、私は線の角度を見つけました(頂点を0として)。これは私が今持っている情報である。

CGPoint firstLocation; 
CGPoint secondLocation; 
CGPoint middleLocation; 

double x1 = firstLocation.x; 
double y1 = firstLocation.y; 
double x2 = middleLocation.x; 
double y2 = middleLocation.y; 

float a = (atan2(y2-y1, x2-x1) * (180/M_PI)) - 90; 

私はいくつかは、CGRectに(CGAffineTransformのような)関数を変換するが、私はそれの中心の周り矩形を回転させる必要があるとして、これが動作するようには思えないし、使用して見てCGRectはその起源を中心に回転します。

Image

すべてのヘルプは高く評価され、そしてあなたが任意のより多くの情報が必要なら、私に教えてください:

は、私は上記の情報では、次のシンボルを作成したいです!

答えて

1

私のアプリで私は似たようなことをしています。私は描画の前に変換を追加するパスを持っています。シフトに中間点へのパスを変換し、それを回転させ、それをバックにシフト:

// Rotate the path such that it points to the end coordinate 
CGAffineTransform t = CGAffineTransformTranslate(
    CGAffineTransformRotate(
    CGAffineTransformMakeTranslation(middleLocation.x, middleLocation.y), 
    -a), 
    -middleLocation.x, -middleLocation.y); 
CGMutablePathRef path = CGPathCreateMutable(); 
CGPoint points[8] = { ... these are the 8 points in my path ... }; 
CGPathAddLines(path, &t, points, 8); 

あなたはCGPathAddLinesを使用する必要はありません、それは私がパスを構築するためだけの最も簡単な方法でした。 CGPathAdd...関数のすべては、変換を行うことができます。

CGPathを使用していない場合は、CGContextTranslateCTMCGContextRotateCTMを実行することで、コンテキスト自体で同様の変換を行うことができます。

+0

ラインが固定されているので、ラインが持つ角度と一致するように、シンボルを真ん中(Gのように)回転させるだけです。そして、私はコンテキスト全体を回転させることはできません。他の多くのことがコンテキスト上に描かれます。 – Manuel

+0

Gを描く直前に文脈を翻訳/回転させ、直後に翻訳/回転を戻すことができます。 – kevboh

+0

ああ、それは実際に動作しますか?私はx = 0、y = 0からx = 100、y = 100まで線を引くとコンテキストの座標を使用しないので変換が役に立たないのですか? – Manuel

関連する問題