CGPathIntersection
CGPathIntersection 是一个iOS、macOS和tvOS库,用于识别两个 CGPath
的交点。
令人惊讶的是,这并不是CoreGraphics直接提供的。对于简单的几何形状(尤其是直线),可以通过分析法计算交点,但如果考虑一个 CGPath
可能任意复杂,这种方法就变得相当具有挑战性。《CGPathIntersection》通过将每个路径渲染成图像,然后找到它们相交的精确像素点来解决这个问题。
安装
Swift Package Manager
将以下依赖项添加到您的包定义中
.package(
name: "CGPathIntersection",
url: "https://github.com/calda/CGPathIntersection.git",
from: "4.0")
Carthage
将 github "calda/CGPathIntersection"
添加到您的Cartfile中
CocoaPods
将pod 'CGPathIntersection'
添加到您的Podfile中
用法
import CGPathIntersection
let path1 = CGPath(...)
let path2 = CGPath(...)
path1.intersects(path2) // returns a boolean
path1.intersectionPoints(with: path2) // returns an array of points
如果在执行许多计算,您可以通过创建一个 CGPathImage
来提高性能。对预存在的 CGPathImage
执行的计算将比在原始的 CGPath
上执行的相同计算要快。
import CGPathIntersection
let pathImage = CGPathImage(from: CGPath(...))
let otherPathImages: [CGPathImage] = [...]
let intersectingPaths = otherPathImages.filter { pathImage.intersects($0) }
示例
CGPathIntersection作为《Streets》组件创建,这是一个SpriteKit游戏原型,模拟管理街道网络。Streets使用CGPathIntersection将个别道路与实际路口连接起来。当汽车到达路口时,它会随机转向另一条连接的道路。
Streets还支持一些更复杂的路径,如环形交叉路口