tvOS CollectionView Выбранные элементы визуализируются медленно - PullRequest
0 голосов
/ 26 октября 2018

У меня настроена коллекция с включенными локальными данными и множественным выбором. Когда я запускаю это на реальном устройстве, у меня возникают некоторые проблемы с рендерингом. Когда я прокручиваю сверхбыстрый, требуется некоторое время, прежде чем появятся активные ячейки. Они остаются неактивными в течение некоторого времени, когда я останавливаюсь, а затем внезапно появляется.

На didSelect я делаю следующее;

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! FRMenuCollectionViewCell
    let selectedCells:[IndexPath] = collectionView.indexPathsForSelectedItems!
    cell.isSelected = true

    switch indexPath.section {
    case 0:
        let item = fixedData[indexPath.row]
        itemSelection.append(item)
        break
    case 1:
        handleContinentSelection(with: indexPath)
        break
    default:
        print("An unexpected case occured")
    }
}


func handleContinentSelection(with indexPath: IndexPath) {
    let continent = continentData[indexPath.row]

    for country in countryData {
        if (country.continent?.continentName)! == continent {
            itemSelection.append(country.countryName!)

            if let index = countryData.lastIndex(of: country) {
                collectionView?.selectItem(at: IndexPath(row: index, section: 2), animated: false, scrollPosition: [])
            }
        }
    }
}

Как показано выше, все выборки в коллекциях имеют различный способ обработки выбора. Если я выбираю что-то в разделе 1, я также выбираю ячейки в разделе 2.

Выбранное и невыбранное состояние обрабатываются в подклассе следующим образом:

class FRMenuCollectionViewCell: UICollectionViewCell {
    @IBOutlet weak var label: UILabel!

    override var isSelected: Bool {
        didSet {
            if super.isSelected == true {
                self.label.attributedText = NSMutableAttributedString(string: self.label.text!, attributes: FRSharedStyles.filledTextAttributes)
            } else {
                self.label.attributedText = NSMutableAttributedString(string: self.label.text!, attributes: FRSharedStyles.opaqueStrokeTextAttributes)
            }
        }
    }
}

Таким образом, выделенное состояние представляет собой заполненный текст, а выделенное состояние выделяется. Все работает хорошо, просто медленно отображается на моем Apple TV при быстрой прокрутке (с боковой прокруткой это наиболее заметно). Любые идеи о том, как оптимизировать это будет оценено.

...