iOS:在画布上动态绘图(上下文)

时间:2012-05-09 12:14:00

标签: objective-c ios math cgcontext

我正在制作一个应用程序,它会在屏幕上绘制一个特定的符号网络(在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只会围绕它的原点旋转。

我想用以上信息创建以下符号:

Image

如有任何帮助,请联系我们!

1 个答案:

答案 0 :(得分: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在上下文中进行类似的转换。