確定我有這樣的情況下我插入5次編程使用這種方法:removeFromSuperview()視圖從第一次未除去
let starView = UIImageView(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.width))
// Set Image & Alpha
starView.image = #imageLiteral(resourceName: "star")
starView.alpha = 1
starView.tag = starIndex
// Add to Super View
self.mainView.addSubview(starView)
請注意,starIndex爲5次是1,2,3,4 ,5因此
它很簡單。
當一個事件發生一段時間後,我用另一種方法來刪除使用這種方法,這些觀點:
func removeOldStars() {
for index in 1...5 {
if let foundView = view.viewWithTag(index) {
foundView.removeFromSuperview()
}
}
}
的結果是最後一個元素只有「5號」被刪除這裏會發生什麼。我試了幾次試驗和錯誤,發現了這種奇怪的行爲。當我使用它的標籤號碼刪除視圖兩次。因此,舉例來說,如果我想與標籤號碼3刪除視圖如果我寫
view.viewWithTag(3).removeFromSuperView()
view.viewWithTag(3).removeFromSuperView()
它的工作原理!如果只是一次,它什麼都不做。我想也許視圖被添加兩次,所以它需要刪除兩次才能注意到,但我調試了它,並沒有添加視圖單次。
我刪除了主線程中的視圖,以確保它的非線程問題不是沒有問題。
我會感謝您的幫助,因爲這太奇怪了,我真的需要了解這裏發生了什麼。
儘量不要使用標籤。您可能有一些其他視圖具有相同的標記值;記錄'viewWithTag'返回的內容。我建議你簡單地把你的5星放進一個數組,然後你不需要使用標籤 – Paulw11
謝謝@ Paulw11它工作了!雖然我確信我從未使用過這些標籤!但是我會盡量儘量減少將來使用它們 –
我會比@ Paulw11更進一步,並說永遠不要使用它們。鼓勵在UI中保存數據,這與UI應該做的事情完全相反。正如你從答案中看到的那樣,總是比使用標籤更好地解決問題。 – Fogmeister