【问题标题】:Core Graphics - My triangle/arc is too pointy核心图形 - 我的三角形/弧线太尖了
【发布时间】:2011-12-09 20:45:13
【问题描述】:

我正在使用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];

这是问题的图片:

左下方蓝色部分的白色尖头略微插入右上方的大蓝色部分。

【问题讨论】:

    标签: ios core-graphics pie-chart


    【解决方案1】:

    它不是“超过”中心点。您的困惑在于您正在抚摸道路。描边路径时,描边位于路径的中心,因此一半的描边在路径之外,一半的描边在路径之内。如果您想要准确的笔划,您有两种选择:

    1. 用你的描边颜色填充你的路径,然后构造另一个路径,以所需的线宽插入第一个路径,然后用你的填充颜色填充该路径。这将模拟“内部”笔触,但如果您的笔触或填充颜色是半透明的,则它不可用。

    2. 剪辑到您的路径,将描边宽度加倍,然后描边您的路径。剪裁将强制笔划仅在路径内绘制。但是,这在拐角处可能看起来不太“准确”(不太确定),因为它会将笔划宽度加倍,而不是计算“所需”路径。

    或者,您可以尝试将lineJoinStyle 设置为kCGLineJoinMiter 以外的其他值。使用默认的斜接样式,线条实际上会从拐角拉出尽可能多的距离以相交,这意味着它们可以超过线宽的 1/2。如果您使用kCGLineJoinRoundkCGLineJoineBevel,它们不能超过线宽的 1/2。这可能不太准确,但它可能足以满足您的需求。

    【讨论】:

    • 我认为使用斜接作为填充物,使用斜角或圆形作为笔划,也许在中心使用一个直径等于线宽的圆,以确保它被覆盖。跨度>
    • 另一种可能的解决方案是先简单地完成所有笔画(如果保证它们始终都是相同的颜色,它们甚至可以在一个笔画中完成),然后是所有的填充。
    • @PeterHosey:“使用斜接填充”的想法没有意义。填充没有连接样式。他们永远不会超越道路,时期。此处的连接样式仅适用于笔划。
    • @Dfowj:很高兴听到这个消息。这当然是最简单的解决方案,但在某些情况下,人们希望笔触不会超出他们的路径,因为他们需要精确,这就是我的其他 2 条建议的用处。
    【解决方案2】:

    我怀疑问题出在白线的线宽上。例如,一条 8 点宽的线在路径的每一侧都有 4 个点。

    【讨论】:

      【解决方案3】:

      我在该图像中看不到问题(哪个切片显示了它?),但我可以建议您删除 addLineToPoint: 消息。没有必要; closePath 将返回中心,因为那是你开始的地方。

      【讨论】:

      • 他的问题是锐角有一个非常尖的尖端延伸到他想要的路径之外,如果你看大蓝色楔子,你会看到对面的蓝色小楔子的尖端侵入.
      猜你喜欢
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多