我正在使用UICollectionView开发纸牌游戏。在加载单元格时,我重写了UICollectionViewCell的 draw()函数来排列图像。每个新游戏,我都会更改游戏中的纸牌数量。因此,单元的数量和大小会发生变化。由于我使用的是第三部分库,因此我必须在 viewWillAppear()方法中对UICollectionView进行所有操作。我的问题是,如何重置之前通过UICollectionView完成的所有工作。我想在每个游戏期间清除UICollectionView,而不必再次加载UIViewController。想要使用 viewWillAppear()方法进行操作。我想清除UICollectionView,因为如果在新游戏中没有清除UICollectionView,则图像会重叠。
注意:我从UICollectionView中删除了所有子视图,如下所示,但它不起作用
let subViews = gameCollectionView.subviews
if subViews != nil {
for view in subViews {
view.removeFromSuperview()
}
}
答案 0 :(得分:0)
您需要从每个单元格的contentView
中删除每个子视图,而不是从集合视图中删除
gameCollectionView.visibleCells.forEach { $0.contentView.subviews.forEach { $0.removeFromSuperview() } }
但是,我不确定您需要重写draw
方法的内容。您应该只创建一次所需的内容,例如在awakeFromNib
中,然后仅根据内容更改图像视图的属性,等等,为此,您可以使用集合视图的数据源方法{{ 1}}。
答案 1 :(得分:0)
清除集合是因为清除了它的dataSource数组,例如
arr = []
gameCollectionView.reloadData()
如果您需要清除单元格,请在cellForRowAt
内进行操作
let cell = ///
cell.contentView.subviews//// clear here
或覆盖
override func prepareForReuse() {
super.prepareForReuse()
// clear any subview here
}
如果您为cellForRowAt
的每次运行正确地为集合单元的所有属性分配值,而没有添加子视图,那么您将没有重叠