Skip to content

SwiftUI: navigation panel #329

Description

@akaDuality

Надо переписать левую панель со структурой проекта на SwiftUI. Так мы сможем показывать ее не только в приложении для мака, но и на айпаде и в очках на visionOS.

Сначала делаем копию для айфона-айпада, а когда все напишем, то можно и на маке будет использовать.

Повторить плоскую структуру

  • Сделать базовую инфраструктуру для фичи: на айпаде она слева, можно показывать и скрывать
    • Использовать UISplitViewController и понять подходит ли supplementary-стиль для настроек
  • Прокинуть объект Frame, относительно которого надо рисовать.
    • Перерисовывать NavigatorView когда добавляют или удаляют элементы
  • Научиться рисовать содержимое одного из фреймов в виде плоского списка.
  • В качестве описания использовать раскрашенное описание элемента
    • Проверить, что тинт правильно срабатывает: когда окно неактивно, то все раскрашенные элементы должны превратиться в серые. Не знаю насколько правильно это ваще умеет работать в SwiftUI
  • Переписать на SwiftUI классы из VoiceOver Designer -> Features -> Navigator в Shared -> Sources -> Navigator. Можно начать изучать от NavigatorController, для него есть заглушка NavigatorView.
  • Проверить как работает на айфоне. Наверно, поведение нужно хитрое: при открытии документа показывать канвас, но добавить кнопку открытия списка элементов в навбар. Ну или просто никогда не показывать :D
  • Выбор элемента в навигаторе должен открывать настройка элемента (наверно, так на маке работает, но не уверен, что это паттерн для айпада)
    • Выбор фрейма должен загружать фрейм в канвас, потому что сейчас айпад работает только с одним фреймом за раз. Возможно, в будущем это стоит переделать, но пока проще так

Иерархическая структура

  • Можем показать всю вложенность: фреймы, контейнеры, элементы. Наверно, фрейм должен переключаться через кнопка в навигейшен-баре (про это задачка ниже), а вот список должен показывать все элементы. Контейнеры можно сделать отдельными секциями, а вложенности контейнеров в контейнеры у нас нет пока.
    Какая-то статья про collapsable

Несколько фреймвов

  • В артборде может быть несколько фреймов, надо переключать их с помощью кнопок < и > в навигейшен баре.
    • Рядом сделать кнопку добавления нового фрейма через добавление картинки

Поддержка перетаскивания

  • Документация Apple
  • Kodeko
  • Medium
  • После перетаскивания надо вызывать метод у presenter, который правильно разложить объект в структуре
    • Если переместить строку после или перед элементом, то она должен переместиться туда
    • Если перетащить одну строчку на другую, то они завернутся в контейнер
    • Можно переность элементы между фреймами
  • Поддержать редактирование списка:
    • Могу удалять элементы или выдели
    • Могу выбрать несколько элементов, должен появиться тулбар, в котором будет кнопка «объединить»
  • Интегрировать в macOS версию и удалить старый пакет Navigator

Баги для Миши

  • Обновлять канвас после изменений в настройках
  • Визуально не выделяется выбранный элемент в канвасе
  • После добавления элемента он не появляется в навигаторе
  • Добавленный элемент сохраняется после закрытия документа, а вот изменение его свойств — нет
  • Окно настроек нельзя интерактивно закрыть
  • Углы у настроек не скруглились (но виновата в этом NavigationView в SwiftUI, лол)
  • Распознавание текста не запускается при выборе элемента

Metadata

Metadata

Assignees

No one assigned

    Labels

    refactoringTechnical improvements

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    No status

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions