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