检查CGRect是否与CGRects数组相交

MJJ*_*LAM 1 nsarray ios cgrect swift cgrectintersectsrect

我想在初始化之前看看CGRects 是否与CGRect数组中的任何其他s相交CGRect,但我还没有找到一个可行的傻瓜证明方法.

请注意,intersection是CGRects 的数组.有什么需要怎么做?下面的方法不起作用有时生成的CGRect与数组中的一个相交我不知道我错过了什么.

for element in intersection {
  while CGRectIntersectsRect(rect1, element) {
    xTemp = CGFloat(arc4random_uniform(UInt32(screenSize.width - buttonWidth1)))
    yTemp = CGFloat(arc4random_uniform(UInt32(screenSize.height - buttonWidth1)))
    rect1 = CGRect(x: xTemp, y: yTemp, width: buttonWidth, height: buttonWidth)
   }
 }
Run Code Online (Sandbox Code Playgroud)

Cri*_*tik 6

您可以使用CGRectIntersectsRect:

let doesIntersect = arrayOfRects.reduce(false) {
    return $0 || CGRectIntersectsRect($1, testRect)
}
Run Code Online (Sandbox Code Playgroud)

或者(感谢Martin R的建议),您可以使用该contains方法代替reduce:

let doesIntersect = arrayOfRects.contains { CGRectIntersectsRect($0, testRect) }
Run Code Online (Sandbox Code Playgroud)

  • 使用contains()而不是reduce()可能更有效,因为一旦找到交集,它就会停止迭代. (4认同)