Как нарисовать подпредставление на UIView, используя Кварц - PullRequest
0 голосов
/ 17 августа 2011

Я генерирую и отображаю древовидную структуру в UIView в приложении для iPad. давайте назовем представление ROOTVIEW. Все узлы дерева также являются UIViews, которые имеют метку и UIImage в качестве подпредставлений. Когда узел генерируется из источника данных, он генерирует UIView для узла и добавляет его в ROOTVIEW как подпредставление. Но проблема в том, что когда древовидная структура велика, как тысячи узлов, она будет использовать слишком много памяти.

Поскольку вид узла не изменится после добавления в ROOTVIEW, я придумаю решение: когда мы получаем UIView узла, вместо добавления его в ROOTVIEW в качестве подпредставления, мы рисуем его в ROOTVIEW и освобождаем узел. UIView. поэтому в конце будет только один вид: ROOTVIEW.

Я не совсем знаком с Quartz, как я могу нарисовать подпредставление на UIView? спасибо.

Ответы [ 3 ]

0 голосов
/ 17 августа 2011

В дополнение к совету по использованию UITableView вы можете также рассмотреть возможность использования кэша ваших собственных представлений узлов дерева. Это означает, что вы храните массив представлений узлов дерева и перерабатываете их - всякий раз, когда пользователь выполняет прокрутку, отображаются разные данные, но (почти) отображается одинаковое количество узлов дерева. Просто выделите достаточно узлов дерева, чтобы заполнить видимую область, может быть, еще два-три для прокрутки краев, и каждый раз, когда пользователь прокручивает, обновляйте данные в каждом узле дерева. Тот же метод используется в UITableview, где он содержит ячейки в количестве, которое может отображаться (обычно 14-20, в зависимости от высоты ячейки), UITalbleView НЕ выделяет ячейки для количества строк в таблице (что может быть сотни или тысячи!)

0 голосов
/ 17 августа 2011

Да, это правильный путь. Просто визуализируйте отдельные представления или даже части дерева представлений в представлении корневого изображения. Посмотрите, как это сделать здесь: Простой или эффективный способ скопировать растровое представление из одного представления в другое?

0 голосов
/ 17 августа 2011

Рассматривали ли вы использование UITableView? Я знаю, что он напрямую не поддерживает вложенные узлы, но вам все равно будет лучше использовать функциональность UITableViewController, а не реализовывать полноценный компонент дерева. Вы можете попытаться настроить ячейки так, чтобы они выглядели с отступом для получения древовидного изображения.

НТН,

Акшай

...