在Core Graphics中如何将路径/形状倾斜

7
我正在尝试在核心图形中倾斜路径。是否有人已经为任意形状完成了这个操作,如果是,他们是否愿意分享代码?
我在下面包含了我的实现。我使用三个变量来确定倾斜程度:CGFloat bevelSizeUIColor highlightColorUIColor shadow。请注意,光源的角度始终为135度。我还没有完成这个实现,但以下是我想要做的事情的基本内容,分为两部分。第一部分,生成焦点:
  1. 我找到路径中每条相邻线之间角度的平分线。
  2. 对于弧,平分线是垂直于弧两端点创建的线的线,从中点开始。这应该可以处理大多数使用弧的情况。我不会取弧和线的平分线。弧的平分线应该在这些情况下正常工作。
  3. 然后,我根据每个相邻平分线的交点计算焦点。
  4. 如果焦点在形状内,则使用它,否则将其丢弃。
生成焦点的目的是按比例“缩小”形状。
第二部分稍微复杂一些。我实际上创建了倾斜形状的每一侧/段。我通过沿着从最近的焦点到相关点的线的半径向内(通过bevelSize)绘制原始形状的每个点来完成此操作。当我有两个连续的“倾斜点”时,我创建了一个UIBezierPath,沿着从倾斜点到原始点并返回到倾斜点的路径延伸(请注意,这包括弧)。这样就创建了一个“侧/段”,我可以用来填充。在直边上,我只是用阴影或高亮颜色填充,具体取决于边的角度。对于弧,我确定弧度“弧”。如果该弧包含过渡角度(M_PI_4或M_PI + M_PI_4),则使用渐变(从阴影到高光或从高光到阴影中的任何一个)进行填充。否则,我会用纯色填充它。
更新
我已将我的答案(请参见下文)拆分为单独的博客文章。我不再使用上面看到的实现细节,但我将所有内容都保留在那里供参考。我希望这能帮助任何想要使用Core Graphics的人。

有点像。问题的主要部分是:有人知道如何在核心图形中将任意形状倒角吗?其余部分只是详细说明了我自己如何实现倒角(我现在已经完成了)。它可以在很多形状上正常工作(但不是所有形状)。如果有人有更好的方法,我会保持问题开放。 - Aaron Hayman
我曾考虑过发布我的解决方案,但那大约有400行代码...看起来要发布很多。 - Aaron Hayman
好的,我已经更新了帖子。它包括我用来斜角化路径的所有代码。 - Aaron Hayman
抱歉我的表述不够清晰。我是说这个问题过于冗长并且包含了太多细节,这可能是为什么没有人回答它的原因。但是谁知道呢?也许现在会有人回答了。祝你好运! - Dan Rosenstark
1
其实那是一个非常好的想法。谢谢 :) - Aaron Hayman
显示剩余8条评论
1个回答

3
所以,最终我成功编写了一个在核心图形中斜切任意形状的例程。这比我最初预期的要费力得多,但这是一个有趣的项目。我已在我的博客上发布了解释和执行斜面的代码。请注意,我没有为此创建完整的类(或一组类)。该代码已集成到我用于进行所有核心图形绘制的更大的类中。然而,大部分任意形状倾斜所需的代码都在那里。 < p > 更新

我将代码重写为纯C并将其移动到单独的文件中。它不再依赖于任何其他实例变量,因此可以从任何上下文中调用斜面函数。

我在这里解释了我用来倾斜的代码和过程:在核心图形中斜切形状

这是代码:Github : CGPathBevel

代码并不完美:我乐于接受建议/更正/更好的做法。


文章看起来很棒。我很快就要试一下。谢谢!+1 - Dan Rosenstark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接