这是一个更特殊的用例主题,但我想要完成一段时间前,我想我会分享它的任何人试图解决类似的问题。
我希望有一个更通用的方式绘制弧,而不是使用CGContextAddArc。
然而,在使用曲线中计算出数学来做到这一点是非常棘手的。幸运的是,我偶然发现了一个做类似事情的博客。你可以在这里阅读。
所以这里是我的实现,以防其他人在那里寻找相同的。此实现在objective-c中:
结构cubicbeziercontrolpoint斯
{
Cg点p1;
Cg点p2;
};
typedef结构CubicBezierControlPoints;
CubicBezierControlPoints CubicBezierControlPointsMake(CGFloat startRadians, CGFloat endRadians, CGFloat radius, CGPoint center)
{
CGFloat theta = 内径-星际;
CGFloat startAngle = startRadians;
CGFloat x0 = cos (θ/2.0);
CGFloat y0 = sin (θ/2.0);
CGFloat x1 = (4.0-x0)/3.0;
CGFloat y1 = ((1.0-x0)*(3.0-x0))/( 3.0 * y0);
CGFloat x2 = x1;
CGFloat y2 = 0-y1;
CGFloat bezAng = 起始角度 θ/2.0;
CGFloat cBezAng = cos(bezAng);
CGFloat sBezAng = sin(bezAng);
CGFloat rx1 = cBezAng * x1 – sBezAng * y1;
CGFloat ry1 = sBezAng * x1 cBezAng * y1;
CGFloat rx2 = cBezAng * x2 – sBezAng * y2;
CGFloat ry2 = sBezAng * x2 cBezAng * y2;
CubicBezierControlPoints cbp;
cbp.p1 = cgpointmark (中心.x半径 * rx1,中心.y半径 * ry1);
cbp.p2 = cgpointmak (中心.x半径 * rx2,中心.y半径 * ry2);
返回cbp;
}
希望这有助于其他人喜欢它帮助了我。
史蒂芬·扎哈鲁克(SteveZ)