Создание пользовательского ротора VoiceOver для вертикальной навигации по UICollectionView - PullRequest
2 голосов
/ 03 мая 2019

У меня есть большая квадратная сетка (225 ячеек), построенная как 2d UICollectionView, и я бы хотел, чтобы слепые пользователи могли легко перемещаться по ней.В настоящее время им нужно было бы прокручивать по горизонтали каждый квадрат, чтобы спуститься вниз.В идеале я хотел бы иметь собственный ротор VoiceOver, который позволяет перемещаться влево, вправо, вверх и вниз для навигации.Возможно ли это?

Если нет, я бы предпочел иметь нестандартный ротор, который перемещается вверх и вниз с помощью пролистывания влево / вправо.Я попытался создать его, получив текущий indexPath и используя метод scrollToItem, чтобы изменить его.Ротор можно выбрать, но на данный момент он не действует, поэтому я пока что сделал это неправильно.

private func setupVerticalRotor() -> UIAccessibilityCustomRotor {

    let vertRotorOption = UIAccessibilityCustomRotor.init(name: "Move vertically") { (predicate) -> UIAccessibilityCustomRotorItemResult? in

        let forward = predicate.searchDirection == UIAccessibilityCustomRotor.Direction.next
        let visibleCells = self.collectionView.visibleCells
        if let firstCell = visibleCells.first {
            if let indexPath = self.collectionView.indexPath(for: firstCell as UICollectionViewCell) {
                if forward {
                    let newIndexPath = IndexPath(row: indexPath.row, section: indexPath.section + 1)
                    self.collectionView.scrollToItem(at: newIndexPath, at: UICollectionView.ScrollPosition.centeredVertically, animated: false)

                }else {
                    let newIndexPath = IndexPath(row: indexPath.row, section: indexPath.section - 1)
                    self.collectionView.scrollToItem(at: newIndexPath, at: UICollectionView.ScrollPosition.centeredVertically, animated: false)
                }
            }
        }
        return UIAccessibilityCustomRotorItemResult.init(targetElement: self.collectionView , targetRange: nil)
    }
    return vertRotorOption
}

1 Ответ

0 голосов
/ 03 мая 2019

В идеале мне бы хотелось иметь собственный ротор VoiceOver, который позволяет перемещаться влево, вправо, вверх и вниз для навигации. Возможно ли это?

Родной ротор уже имеет элемент для вертикальной навигации. enter image description here

Для вашего кода я предлагаю взглянуть на этот пользовательский пример ротора + проверить обновление ячеек представления вашей коллекции с точками останова в Xcode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...