我使用UIBezierPath
和[path addArcWithCenter:radius:startAngle:endAngle:clockwise:]
方法在Core Graphics的自定义饼图中绘制'切片'。我的问题是,切片的尖端实际上突然过去中心点,侵入其他切片空间。
有没有办法'围绕'这个边缘?
以下是用于绘制路径的代码
[path moveToPoint:center];
[path addArcWithCenter:center radius:radius startAngle:interiorAngle endAngle:totalAngle clockwise:YES];
[path addLineToPoint:center];
[path closePath];
以下是问题的图片:
左下方蓝色部分的白色尖端稍微侵入右上角的大蓝色部分。
答案 0 :(得分:5)
它不是“过去”的中心点。你的困惑在于你正在抚摸这条道路。描边路径时,笔划位于路径的中心位置,因此笔划的一半位于路径之外,笔划的一半位于路径内。如果您想要准确的笔画,您有两种选择:
使用笔触颜色填充路径,然后按照所需的线宽构建另一条插入第一条路径的路径,然后使用填充颜色填充该路径。这将模拟“内部”笔划,但如果笔划或填充颜色是半透明的,它将无法使用。
剪辑到您的路径,将笔触宽度加倍,然后抚摸您的路径。剪切将强制笔划仅在路径内绘制。然而,这在角落看起来可能看起来不太“准确”(不是很确定),因为它会使笔划宽度加倍而不是计算“所需”路径。
或者,您可以尝试将lineJoinStyle
设置为kCGLineJoinMiter
以外的其他内容。使用默认的斜接样式,线条实际上从角落处抽出以便满足,这意味着它们可以超过线宽的1/2。如果您使用kCGLineJoinRound
或kCGLineJoineBevel
,则无法超过线宽的1/2。这可能不太准确,但它可能足以满足您的需求。
答案 1 :(得分:1)
我怀疑问题在于白线的线宽。例如,一条8点宽的线,在路径的两边都有4个点。
答案 2 :(得分:0)
我无法在该图片中看到问题(哪个切片正在显示?),但我建议您删除addLineToPoint:
消息。没有必要; closePath
将返回中心,因为那是你开始的地方。