UICollectionView Горизонтальная прокрутка со статически сфокусированным элементом - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь создать горизонтально прокручиваемый UICollectionView, встроенный в UITableViewCell на tvOS, и достиг своей цели.

Что мне нужно сделать дальше - это иметь возможность сместить фокус на следующий элемент в UICollectionView, но весь стек элементов должен сместиться на одну позицию влево или вправо, но фокус останется на «первый» товар визуально.

Вот небольшая ASCII-диаграмма того, чего я надеюсь достичь:

Scenario 1, before focus shifts
     ---------------------
1.   | v   v   v   v   v |
2.   |[v]  v   v   v   v |
3.   | v   v   v   v   v |
     ---------------------

Scenario 1, after focus shifts
     ---------------------
1.   | v   v   v   v   v |
2.   | v  [v]  v   v   v |
3.   | v   v   v   v   v |
     ---------------------

Выше, Сценарий 1 , является поведением по умолчанию, при котором фокус смещается на следующий элемент в UICollectionView.

Scenario 2, before focus shifts
     ---------------------
1.   | v   v   v   v   v |
2.   |[v]  v   v   v   v |
3.   | v   v   v   v   v |
     ---------------------

Scenario 2, after focus shifts
     ---------------------
1.   | v   v   v   v   v |
2. v |[v]  v   v   v     |
3.   | v   v   v   v   v |
     ---------------------

В Сценарий 2 , после того, как я проведу по пульту ДУ для выбора следующего элемента в UICollectionView, фокус должен остаться слева, но элемент под фокусом должен сместиться на единицу.

У кого-нибудь есть намеки на то, как этого можно достичь?

Я прочитал сообщения о прикрепленных столбцах в UICollectionView, но я думаю, что это не совсем прикрепленный столбец?

1 Ответ

0 голосов
/ 02 июля 2018

Мне пришлось сделать это недавно для проекта. Вот что я использовал:

 override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
    if let focusView = context.nextFocusedView as? UICollectionViewCell, let indexPath = collection.indexPath(for: focusView) {

        collection.isScrollEnabled = false
        coordinator.addCoordinatedAnimations({
            self.collection.scrollToItem(at: indexPath, at: .left, animated: true)
        }, completion: nil)
    }
}
...