gpt4 book ai didi

iphone - 使用 UIBezierPath 绘制图形曲线

转载 作者:IT王子 更新时间:2023-10-29 08:21:23 25 4
gpt4 key购买 nike

我正在我的应用程序中绘制图表。我的问题是我想绘制连接顶点的线作为曲线。目前我正在使用 UIBezierPath 的函数 addLineToPoint: 绘制它们。我想把它们画成曲线。我很清楚 UIBezierPath 有以下两个函数来支持此功能。

三次曲线:addCurveToPoint:controlPoint1:controlPoint2:二次曲线:addQuadCurveToPoint:controlPoint:

但问题是我没有控制点。我只有两个终点。我也没有找到确定控制点的方法/公式。有人能帮我一下吗?如果有人可以提出一些替代方案,我将不胜感激......

最佳答案

详述 2012 年 12 月 5 日 Abid Hussain 的回答。

我实现了代码,它起作用了,但结果看起来像这样: enter image description here

只需稍作调整,我就能得到我想要的: enter image description here

我所做的也是将 QuadCurveToPoint 添加到中点,使用中点作为控制点。以下是基于阿比德样本的代码;希望对某人有所帮助。

+ (UIBezierPath *)quadCurvedPathWithPoints:(NSArray *)points
{
UIBezierPath *path = [UIBezierPath bezierPath];

NSValue *value = points[0];
CGPoint p1 = [value CGPointValue];
[path moveToPoint:p1];

if (points.count == 2) {
value = points[1];
CGPoint p2 = [value CGPointValue];
[path addLineToPoint:p2];
return path;
}

for (NSUInteger i = 1; i < points.count; i++) {
value = points[i];
CGPoint p2 = [value CGPointValue];

CGPoint midPoint = midPointForPoints(p1, p2);
[path addQuadCurveToPoint:midPoint controlPoint:controlPointForPoints(midPoint, p1)];
[path addQuadCurveToPoint:p2 controlPoint:controlPointForPoints(midPoint, p2)];

p1 = p2;
}
return path;
}

static CGPoint midPointForPoints(CGPoint p1, CGPoint p2) {
return CGPointMake((p1.x + p2.x) / 2, (p1.y + p2.y) / 2);
}

static CGPoint controlPointForPoints(CGPoint p1, CGPoint p2) {
CGPoint controlPoint = midPointForPoints(p1, p2);
CGFloat diffY = abs(p2.y - controlPoint.y);

if (p1.y < p2.y)
controlPoint.y += diffY;
else if (p1.y > p2.y)
controlPoint.y -= diffY;

return controlPoint;
}

关于iphone - 使用 UIBezierPath 绘制图形曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13719143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com