簡體   English   中英

合並重疊的 CGRects

[英]Merge overlapping CGRects

如果我有一個類Button

class Button: Hashable {
    private let id: String
    var name: String
    var rect: CGRect    
}

我還有一個Button數組: var buttons: [Button] ,我將如何合並buttons數組中的每個重疊按鈕? CGRect有一個intersects() -> Boolunion() -> 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會不斷減少,但ij都在計數直到開始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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM