确定我有这样的情况下我插入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