CGPathIntersection 4.0

CGPathIntersection 4.0

Cal Stephens 维护。



  • 作者
  • Cal Stephens

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还支持一些更复杂的路径,如环形交叉路口