Nano Hash - криптовалюты, майнинг, программирование

tvOS UICollectionViewFocusUpdateContext выбирает несколько элементов при быстрой прокрутке

В моем проекте 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, кажется, что система фокусировки не справляется.

Примечание. Если я попытаюсь просто изменить масштаб изображения ячейки, а не всей ячейки, это кажется намного лучше, однако иногда мне все же удавалось воспроизвести проблему.

Могу ли я вообще избежать этого?


  • У меня тоже была эта проблема. Мне кажется, проблема в том, что scaleDown не вызывается для всех ячеек, которые были сфокусированы, поэтому, когда вы возвращаете ячейку из dequeueReusableCell, она все еще имеет эффект масштабирования. 02.10.2017
  • Вы проверили мой ответ ниже. Это исправило это для меня 02.10.2017

Ответы:


1

Исправил это, изменив код фокуса на этот

func collectionView(_ collectionView: UICollectionView, didUpdateFocusIn context: UICollectionViewFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {

    if let previousCell = context.previouslyFocusedView as? UICollectionViewCell {
        scaleDown(cell: previousCell, coordinator: coordinator)
    }

    if let nextCell = context.nextFocusedView as? UICollectionViewCell {
        scaleUp(cell: nextCell, coordinator: coordinator)
    }
}
19.02.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..