[英]Merge overlapping CGRects
如果我有一個類Button
:
class Button: Hashable {
private let id: String
var name: String
var rect: CGRect
}
我還有一個Button
數組: var buttons: [Button]
,我將如何合並buttons
數組中的每個重疊按鈕? CGRect
有一個intersects() -> Bool
和union() -> CGRect
函數。
我嘗試了這個並且正在獲取索引超出范圍的錯誤:
for i in 0..<buttons.count {
for j in (i+1)..<buttons.count {
if buttons[i].rect.intersects(buttons[j].rect) {
let secondRect = buttons[j].rect
let union = buttons[i].rect.union(secondRect)
buttons[i].rect = union
buttons.remove(at: j)
}
}
}
Swift for
循環是靜態的,這意味着索引的范圍在開始時確定。 當您刪除下一個項目時, buttons.count
會不斷減少,但i
和j
都在計數直到開始buttons.count
,這就是您崩潰的原因。
有沒有動態for
斯威夫特(C類),這就是為什么你必須同時改為使用方法:
var i = 0
while i < buttons.count {
var j = i + 1
while j < buttons.count {
if buttons[i].rect.intersects(buttons[j].rect) {
let secondRect = buttons[j].rect
let union = buttons[i].rect.union(secondRect)
buttons[i].rect = union
buttons.remove(at: j)
} else {
j += 1
}
}
i += 1
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.