UIBezierPath-Query 1.0.0

UIBezierPath-Query 1.0.0

Emmanuel Merali 维护。



  • Emmanuel Merali

UIBezierPath-Query

CI Status Version License Platform

UIBezierPathNSBezierPath 添加多个酷炫功能的扩展。
完全基于 Maximilian Kraus 编写的 UIBezierPath+Superpowers,以便使其能够在 CocoaPods 中使用。
所有原始工作由其原始作者完成

需求

在 XCode 11.2.1 和 Swift 5.1 上进行测试。

Xcode 11.2+
Swift 5.1+

安装

UIBezierPath-Query 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中即可:

pod 'UIBezierPath-Query'

示例

要运行示例项目,请首先克隆仓库,然后从 Example 目录运行 pod install

特性

此库为 UIBezierPath 添加了多个主要特性。

计算路径长度

var mx_length: CGFloat

返回路径的长度。

计算贝塞尔点

mx_point(atFractionOfLength: CGFloat) -> CGPoint

对于给定的分数,返回路径上的点 fraction * pathLength

计算垂直点及距离

mx_perpendicularPoint(for: CGPoint) -> CGPoint

返回路径上与给定 CGPoint 最近点,实际上是在路径上从 point 垂直下落并返回交点。

计算路径斜率和切线角度

mx_tangentAngle(atFractionOfLength: CGFloat) -> CGFloat

对于给定的分数,返回路径上 fraction * length 点的切线角度。


工作原理

所有这一切的基础是 CGPath 上的一个函数 apply(info:, function:)。这基本上允许你迭代一个给定的 UIBezierPath 是由什么元素组成的。

简短插曲

UIBezierPath 及其 Cocoa 平台的对应类型 NSBezierPath 是贝塞尔曲线的描述。这些曲线基本上是一种将线绘制指令输入到计算机中的巧妙方法。贝塞尔路径由不同类型的路径元素组成。每个元素要么是一条直线,要么是一条二次曲线或三次曲线。从本质上讲,这些曲线归结为数学函数,使我们能够计算诸如线条长度、切线角度等内容。如果您想了解更多信息,Wikipedia 上有一篇撰写得非常好且易于理解的关于 贝塞尔曲线 的文章。

这个库的功能是从构成路径的所有元素中提取出来并施加一些几何数学运算。由于提取和初始计算相当昂贵,如果可能的话,结果会被内部缓存。

然而,默认情况下,缓存是禁用的,因为按照设计,这个库位于一个 extension 中,而不是 UIBezierPath 的子类。这带来了关于方法覆盖、内部变量等方面的某些限制。为了启用全部功能,您需要调用 UIBezierPath.mx_prepare()。这会执行一些背后的运行时魔法,打破了 extension 的链条,并为您提供对任何 UIBezierPath 对象上所有功能的完全访问。

贡献

随时可以根据该项目进行构建和/或提交 PR。

作者

  • Maximilian Kraus

许可

本项目的许可协议为 MIT 许可证 - 有关详情,请参阅 LICENSE.md 文件。

致谢