Skip to content

SwiftUI: navigation panel #329

@akaDuality

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

    Projects

    Status

    No status

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions