Как имитировать представление рабочего процесса Automator? - PullRequest
1 голос
/ 05 апреля 2010

Я начинаю разработку моего первого полноценного приложения Какао, содержащего представление, которое я хотел бы вести (и выглядеть) аналогично AMWorkflowView в Automator.

Основные функции, которых я хотел бы достичь:

  • Позиционирование подпредставлений
  • Отображение подпредставлений в развернутом / свернутом состоянии
  • Множественный выбор
  • Перетаскивание

Чтобы привыкнуть к Какао, я начал с пользовательского NSView, который в основном служил контейнером для пользовательских подпредставлений и обрабатывал их позиционирование и множественный выбор. Подвиды также являются подклассами NSView и содержат переменное количество самих представлений, таких как кнопки, метки и всплывающие меню, и поэтому могут иметь различную высоту. Это сработало довольно хорошо, но перед тем, как продолжить, я хочу убедиться, что все в порядке и порядке в соответствии с шаблоном MVC.

Я подозреваю, что в Какао уже есть класс, который облегчает реализацию контейнера представления, как, возможно, NSCollectionView. Кажется, что нет (простого) способа отображать представления разных размеров в NSCollectionView. Должен ли я продолжить реализацию своего пользовательского NSView (возможно, используя NSArrayController для поддержки выбора и сортировки), или есть более эффективные способы?

Любая помощь очень ценится

1 Ответ

0 голосов
/ 06 апреля 2010

К сожалению, ответом будет то, что вам придётся катиться самостоятельно. NSCollectionView не допускает элементы переменного размера (что также исключает расширенные / свернутые состояния).

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

Перетаскивание работает так же, как и всегда, но ничто из вышеперечисленного не объясняет симпатичную анимацию NSCollectionView. :-) Это быстро и красиво анимировано точно , потому что все подпредставления одинаковы (поэтому расчеты макета быстрые и простые). После добавления неправильных размеров проблема значительно усложняется.

Суть: если вам нужны представления переменного размера, NSCollectionView не будет работать, и вам нужно будет свернуть свой собственный или найти чужой общий код, но производительность и красивая анимация не будут легкими.

...