gpt4 book ai didi

ios - 快速绘制圆弧时的额外线条

转载 作者:行者123 更新时间:2023-11-30 14:13:33 30 4
gpt4 key购买 nike

我在一个快速应用程序中有这种代码,并且我得到了一条额外的灰线到达弧线的起点。弧线本身按预期绘制,但似乎 CGContextMoveToPoint 在到达起点之前留下了一些痕迹。

override func drawRect(rect: CGRect) {
var context:CGContextRef = UIGraphicsGetCurrentContext();

var centerX,centerY,startAngle,endAngle,radius:CGFloat
startAngle = CGFloat(M_PI_4)
endAngle = -startAngle
radius = (rect.height/2) / sin(startAngle)
centerX = rect.width/2 + (radius*cos(startAngle))
centerY = rect.height/2
CGContextMoveToPoint(context, rect.width/2, rect.height)
CGContextAddArc(context,centerX,centerY,radius,startAngle,endAngle,0);
CGContextSetLineWidth(context, 3.0)
CGContextSetStrokeColorWithColor(context, UIColor.lightGrayColor().CGColor)
CGContextStrokePath(context)
}

知道可能出了什么问题吗?

最佳答案

这是CGContextAddArc的一项功能。来自文档:

If the current path already contains a subpath, Quartz adds a line connecting the current point to the starting point of the arc. If the current path is empty, Quartz creates a new new subpath with a starting point set to the starting point of the arc.

通过移动到一个点,您就已经确定了路径的起点。如果删除CGContextMoveToPoint(),您的圆弧将在没有多余线条的情况下绘制。

或者,您可以移动到圆弧的起点:

CGContextMoveToPoint(context, centerX + radius*cos(startAngle), centerY + radius*sin(startAngle))
<小时/>

更新

(编者注:我在@Michel弄清楚问题后添加了这一点。这也许是我在评论中讨论后应该给出的答案。在这里提供它可能是为了将来帮助其他人)。

您的整个弧看起来像字母 c,但在 View 中只有一部分可见(给出上面的代码)。额外的线是从 View 底部的中间到屏幕外的 c 曲线的下起点绘制的。

如果您只需要 View 中的弧线部分,那么您的起始角度应为 3 * M_PI_4 并且您的 centerX 计算需要使用 -而不是+:

override func drawRect(rect: CGRect) {
var context:CGContextRef = UIGraphicsGetCurrentContext();

var centerX,centerY,startAngle,endAngle,radius:CGFloat
startAngle = 3 * CGFloat(M_PI_4)
endAngle = -startAngle
radius = (rect.height/2) / sin(startAngle)
centerX = rect.width/2 - (radius*cos(startAngle))
centerY = rect.height/2
CGContextMoveToPoint(context, rect.width/2, rect.height)
CGContextAddArc(context,centerX,centerY,radius,startAngle,endAngle,0);
CGContextSetLineWidth(context, 3.0)
CGContextSetStrokeColorWithColor(context, UIColor.lightGrayColor().CGColor)
CGContextStrokePath(context)
}

然后,您的起点将出现在 View 中,并且不会出现多余的线条。

关于ios - 快速绘制圆弧时的额外线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31489157/

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