如何解决是否有 UIBezierPath 等效于 CGPath 的`addArc(tangent1End:tangent2End:radius:transform:)`?
构建圆角矩形的自定义变体是一项繁琐的工作。此线程中的 Swift V 5.1 答案:
Swift: UIBezierPath Stroke Animation from Center
描述从顶部中心开始绘制一个圆角矩形,以便您可以从该点开始为它设置动画。
它使用 UIBezierPath 方法 addArc(withCenter:radius:startAngle:endAngle:clockwise:)
绘制圆角矩形的角弧。
使用正确的代码来绘制连接的一系列线段和四分之一弧需要相当多的小心,再加上一些三角知识来计算每个象限的不同弧的角度。
CGPath 有一个 addArc 的变体,addArc(tangent1End:tangent2End:radius:transform:)
,其工作方式不同。它需要“切线端点”来定义圆弧,设置起来就不那么麻烦了(一旦你弄清楚它是如何工作的。)
我找不到 UIBezierPath 的等效方法。我错过了什么吗?我想答案是创建一个 CGPath
(或者更确切地说,CGMutablePath
使用对 addArc(tangent1End:tangent2End:radius:transform:)
的调用,然后使用采用 CGPath 的 UIBezierPath 初始值设定项,但这是一个额外的步骤,使代码有点混乱。
解决方法
看起来没有与 UIBezierPath
方法 CGPath
等效的 addArc(tangent1End:tangent2End:radius:transform:)
。
我想答案是当您想以 CGPath
形式添加弧线时使用 addArc(tangent1End:tangent2End:radius:transform:)
,然后使用 UIBezierPath
将结果转换为 UIBezierPath.init(cgPath:)
初始化程序。
起初我想我可以编写一个 UIBezierPath
的扩展,它会向 addArc(tangent1End:tangent2End:radius:transform:)
添加一个 UIBezierPath
方法,但这会变得非常混乱,因为 addArc(tangent1End:tangent2End:radius:transform:)
使用当前笔在活动路径中的位置以找出第一条切线。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。