そのため、2つのポイント間の矢印のように見えるを生成しようとしてNSBezierPath
います。これは、ビューのどこにでも配置できるため、startPointはエンドポイントよりも大きくても小さくてもかまいません。
描画アプリのようにユーザーがマウスをドラッグすると、矢印が更新されます。
私はすでに、三角法を実行するために変換といくつかの数学を使用する必要があることを理解し、この実装を考え出しました。
+(NSBezierPath *)arrowWithStart:(NSPoint)startPoint andEnd:(NSPoint)endPoint{
NSBezierPath* path = [NSBezierPath bezierPath];
CGFloat width = endPoint.x - startPoint.x;
CGFloat height = endPoint.y - startPoint.y;
CGFloat angle = atan2(width, height);
NSAffineTransform *tr = [NSAffineTransform transform];
[tr translateXBy:startPoint.x yBy:startPoint.y];
[tr scaleXBy:width yBy:height];
[tr rotateByDegrees:angle];
[path moveToPoint:CGPointZero];
[path lineToPoint:CGPointMake(0.75, 0.7)];
[path lineToPoint:CGPointMake(0.8, 0.65)];
[path lineToPoint:CGPointMake(1, 1)];
[path lineToPoint:CGPointMake(0.65, 0.8)];
[path lineToPoint:CGPointMake(0.7, 0.75)];
[path closePath];
[path transformUsingAffineTransform:tr];
return path;
}
このコードは、ポイントがある種の対角線の場合、非常に優れた矢印を生成します。
- (0,0)
- (-2、-2)
お互いに、しかしポイントが水平または垂直線に近づいているときのように
- (2,3)
- (5,3)
結果は、矢印のない直線になります。
ですから、私は変換行列で何か間違ったことをしていると思います。
私がどこで間違いを犯しているのか誰かが知っていれば、それは素晴らしいことです。