我正在制作一个应用程序,它会在屏幕上绘制一个特定的符号网络(在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只会围绕它的原点旋转。
我想用以上信息创建以下符号:
如有任何帮助,请联系我们!
答案 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
,则可以通过CGContextTranslateCTM
和CGContextRotateCTM
在上下文中进行类似的转换。