У меня есть CollectionView с ячейкой прототипа.В ячейке есть метка.Ярлык меняет значение с течением времени очень часто.Я перезагружаю данные с collectionView.reloadItems[at: [indexPath]]
, моя проблема в том, что когда я использую этот метод, обновляя метки в представлении коллекции, когда метка обновляет свое значение, я на мгновение перекрываю значения: Как на картинке:
Когда я использую метод collectionView.reloadData()
У меня нет этой проблемы.Но для обновления представления коллекции требуется гораздо больше ресурсов процессора и времени.
Еще код: Здесь я собираю новые данные ячейки и отправляю их в свою функцию updateCell:
let btesMeter:[UInt8] = [data![7], data![6], data![5], data![4]]
let resultMeter = (UInt32(btesMeter[3]) << 24) + (UInt32(btesMeter[2]) << 16) + (UInt32(btesMeter[1]) << 8) + UInt32(btesMeter[0])
let tempresultMeter = resultMeter / 1000
updateCell(cellname: "Kilometerstand", newValue: String(tempresultMeter))
Это моя функция UpdateCel:
func updateCell(cellname: String, newValue: String) {
let cell = cellname
if let cellname = periodicData.first(where: {$0.title == cell}) {
if cellname.value == newValue {
return
} else {
cellname.value = newValue
if let indexOf = periodicData.firstIndex(where: {$0.title == cell}) {
// Reload the index
let indexPath = IndexPath(item: indexOf, section: 0)
let array:[IndexPath] = [indexPath]
collectionView.reloadItems(at: array)
}
}
}
}
cellForItemAt:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CustomCollectionViewCell
cell.labelTitle.text = periodicData[indexPath.row].title
cell.labelValue.text = periodicData[indexPath.row].value
return cell
}
CustomCollectionViewCell:
class CustomCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var labelTitle: UILabel!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var labelValue: UILabel!
}