我需要做的就是创建一个包含 UIBezierPath
的 CGRect
,并且我有一个 CGPoint
数组。
要创建这个 CGRect
,我需要做的就是枚举 CGPoint
数组并找到最小和最大 X 和 Y 坐标。
然后我想起古老而优秀的 NSArray
有一个名为 valueForKeyPath
的函数,它可以与 valueForKeyPath:@max.x
或 valueForKeyPath:@min.x
可以神奇地找到 x 和 y 的最小值和最大值。
我是 Swift 新手。这是我第一次使用 Swift 来创建严肃的代码。
Swift 数组有什么魔力可以用来做到这一点,而不是创建复杂的枚举和循环吗?
最佳答案
简单的解决方案,如果您已经有 UIBezierPath
,就是得到它的 bounds
:
let rect = path.bounds
如果您有一个点数组并希望其边界包含这些点,您可以 min
和max
x
和y
坐标,但我可能 reduce
union
所有点:
let points = [
CGPoint(x: 200, y: 200),
CGPoint(x: 300, y: 300),
CGPoint(x: 200, y: 400),
CGPoint(x: 100, y: 300)
]
let rect = points.first.map { firstPoint in
points.dropFirst()
.reduce(CGRect(origin: firstPoint, size: .zero)) { rect, point in
rect.union(CGRect(origin: point, size: .zero))
}
}
关于arrays - 在此过程中创建包含 UIBezierPath 和 NSArray x Array 的 CGRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55053808/