0

私は現在、(CGContextRef上で)画面に特定の標識ネットワークを引き出すアプリケーションを作成しています。これまでのところすべてが順調に進んでいますが、今ではこの問題を解決できない状況に陥っています。

線だけを知っているオブジェクトを動的に描画しようとしています(開始点と終了点の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など)を使用することを検討しましたが、rectを中心の周りで回転させる必要があり、CGRectはその原点の周りでのみ回転するため、これは機能しないようです。

上記の情報を使用して次のシンボルを作成したいと思います。

画像

どんな助けでもありがたいです、そしてあなたがより多くの情報を必要とするならば、私に教えてください!

4

1 に答える 1

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

于 2012-05-09T13:00:21.953 に答える