在Core Graphics中倒角路径/形状

我正在尝试在核心图形中倾斜路径。 有没有人已经为任意形状做过这些,如果愿意的话,他们是否愿意共享代码?

我已经在下面列出了我的实现。 我使用三个变量来确定斜角: CGFloat bevelSizeUIColor highlightColorUIColor shadow 。 请注意,光源的角度始终为135度。 我还没有完成这个,但这里基本上是我想要做的,分成两部分。 第一部分,产生联络点:

  • 我找到路径中每条相邻线之间角度的平分线。
  • 对于圆弧,平分线是垂直于由圆弧的两个端点创建的直线的线,起始于中点。 这应该处理大多数使用弧线的情况。 我不采取弧和线的平分线。 在这种情况下,平分线应该正常工作。
  • 然后我根据每个相邻平分线的交点计算焦点。
  • 如果焦点位于其使用的形状内,否则将被丢弃。
  • 产生焦点的目的是按比例“缩小”形状。

    第二部分有点复杂。 我必须创造出斜边形状的每一侧/部分。 我通过沿着从最近的焦点延伸到所讨论的点的直线的半径绘制原始形状的每个点的'in'(通过bevelSize )来做到这一点。 当我有两个连续的'bevelPoints'时,我创建了一个UIBezierPath,它沿着从bevelPoints到原始点并返回到bevelPoints(注意,这包括弧)。 这会创建一个我可以用来填充的“边/细分”。 在直线两侧,根据侧面的角度,我只需填充阴影或高光颜色。 对于弧线,我确定了弧度“弧线”。 如果该弧线包含过渡角度(M_PI_4或M_PI + M_PI_4),则使用渐变填充(从阴影到高亮或高亮阴影,这是合适的)。 否则,我用纯色填充它。

    更新

    我已将我的答案(见下文)分解为单独的博客文章。 我不再使用你在上面看到的实现细节,但我将它保留在那里供参考。 我希望这可以帮助其他人寻找使用Core Graphics。


    所以我最终设法编写了一个例程来在核心图形中创建任意形状。 它最终做了很多工作,比我原先预料的要多得多,但这是一个有趣的项目。 我已经发布了一个解释和代码在我的博客上执行斜角。 请注意,我没有为此创建完整的类(或一组类)。 这段代码被集成到了我用来做所有核心图形绘制的更大的类中。 但是,你需要的所有代码都是大多数任意形状的代码。

    UPDATE

    我已经将代码重写为直接c,并将其移入单独的文件中。 它不再依赖于任何其他实例变量,因此可以在任何上下文中调用斜切函数。

    我解释了我在这里使用的代码和过程:在核心图形中倒角形状

    这里是代码:Github:CGPathBevel。

    代码并不完美:我愿意接受建议/更正/更好的做事方式。

    链接地址: http://www.djcxy.com/p/10585.html

    上一篇: Beveling a path/shape in Core Graphics

    下一篇: How to copy text to the clipboard in Javascript?