В моем проекте SpriteKit я использую UICollectionView, чтобы иметь меню выбора персонажа. Это очень простой CollectionView с 8 ячейками в 1 строке. Каждая ячейка имеет только изображение персонажа.
В tvOS я не использую автоматическую систему фокусировки по умолчанию, когда устанавливаю
imageView.adjustsImageWhenAncestorFocused = true
потому что мне не нравится эффект тени, который я получаю при этом.
Поэтому я делаю фокус вручную, используя
func collectionView(_ collectionView: UICollectionView, didUpdateFocusIn context: UICollectionViewFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
if let previousIndexPath = context.previouslyFocusedIndexPath, let cell = collectionView.cellForItem(at: previousIndexPath) {
scaleDown(cell: cell, coordinator: coordinator)
}
if let nextIndexPath = context.nextFocusedIndexPath, let cell = collectionView.cellForItem(at: nextIndexPath) {
scaleUp(cell: cell, coordinator: coordinator)
}
}
ScaleUp и ScaleDown — это два простых метода, которые будут использовать координатор для анимации внешнего вида фокуса ячейки. Ничего необычного здесь не происходит.
Все работает отлично, когда я прокручиваю от медленного до среднего быстрого. Однако, когда я делаю очень быструю прокрутку, где она идет в основном от 1-й к последней ячейке, она иногда выбирает несколько элементов. Я получаю в фокусе 2-3 ячейки вместо 1, кажется, что система фокусировки не справляется.
Примечание. Если я попытаюсь просто изменить масштаб изображения ячейки, а не всей ячейки, это кажется намного лучше, однако иногда мне все же удавалось воспроизвести проблему.
Могу ли я вообще избежать этого?