Задача C (iOS) дизайн вопрос - PullRequest
       0

Задача C (iOS) дизайн вопрос

2 голосов
/ 17 октября 2010

У меня проблема с тем, что данные представлены в виде дерева (например, двоичное дерево). Дерево имеет узлы разного вида. Таким образом, в основном, существует базовый класс, а затем из него выводятся разные узлы.

Эти данные также должны быть представлены на экране (для пользователя), и это включает в себя пользовательский рисунок каждого узла. Способ отрисовки узла зависит от типа узла. Дерево также включает в себя процесс упрощения, с помощью которого на основе некоторых правил выводится новая упрощенная форма исходного дерева.

Чтобы нарисовать эти узлы, мне нужно сохранить положение и размер. Я хотел бы знать, как я могу отделить этот код и данные, необходимые для рисования дерева на экране, от других данных в узле, которые будут использоваться для упрощения.

Надеюсь, вопрос имел смысл. Спасибо за помощь и время.

Ответы [ 2 ]

1 голос
/ 17 октября 2010

Один из подходов заключается в создании иерархии классов 1: 1 для представлений, представляющих узлы вашего дерева.То есть каждый класс узла дерева имеет свой собственный аналог подкласса UIView, который знает, как рисовать конкретный класс узла дерева.UIViews (и CALayers) уже имеют все необходимые интерфейсы для поддержки размеров, позиций и даже иерархий.Возможным недостатком этого подхода является то, что если у вас огромная иерархия классов узлов дерева (очень много разных классов узлов), у вас будет огромное количество классов представлений, которые могут стать немного скучными для кода и поддержки.Попробуйте извлечь большинство общих функций рисования в суперкласс представления дерева и посмотрите, поможет ли это упростить иерархию классов представления узла путем повторного использования классов представления для разных узлов дерева (конечно, если это вообще имеет смысл).

Другой подход заключается в добавлении некоторых методов компоновки / рисования в классы модели в форме протокола.Таким образом, узлы вашего дерева знают, как рисовать сами, один класс представления узла дерева вызывает эти методы рисования и поддерживает размеры / позиции.

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

0 голосов
/ 17 октября 2010

Не совсем понятно, что вы имеете в виду под «поддерживать позицию и размер».

Если вы имеете в виду, что для данного узла N, принадлежащего Дереву (T), у него есть один и тот же родитель и те же дочерние элементы, вы поясните нам, если преобразование, которое вы применяете к T, чтобы получить упрощенный (T1) создает другое дерево или гомоморфное дерево.

Я не очень хорошо знаю Цель C, но вопрос, который вы задаете нам, кажется общим для каждого языка ООП.

Учитывая N узел, который вы используете в дереве T, вы можете объявитьвнутренний класс "NData" внутри базового класса N. Таким образом, каждый производный от узла класс будет иметь данные NData для использования в процессе упрощения.

Надеюсь, я понял вопрос: -)

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