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),但这似乎不起作用,因为我需要围绕它的中心旋转矩形,而 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,则可以通过执行CGContextTranslateCTM和在上下文本身中进行类似的转换CGContextRotateCTM

于 2012-05-09T13:00:21.953 回答