Я ищу какой-то простой, простой пример того, как работать с парой NSScrollers в NSScrollView с пользовательским NSView.
Существуют единичные примеры, в основном состоящие из надуманных примеров, использующих программно созданные интерфейсы, или основанные на предположении, что разработчик работает с типичным ImageView или TextView. Даже пример Sketch основан на NSView, который использует параметры страницы в диалоговом окне «Печать» для границ, и все управляется Какао. Таким образом, нигде нет реальных обсуждений или примеров того, как заставить все это работать с использованием пользовательской Модели (хотя это может быть частью проблемы, потому что на чем основывается Модель?). Даже собственная документация Apple здесь хитрая.
По сути, у меня есть подклассифицированный NSView, встроенный в NSScrollView (в соответствии с Руководством по просмотру Scoll), который пользователь может щелкнуть в представлении для создания, редактирования и удаления объектов, во многом как программа для иллюстрации. Модель - это те объекты, которые являются просто обертками данных, которые просто записывают свою позицию для использования drawRect :. Высота и ширина основаны на пользовательских значениях, которые при необходимости переводятся в пиксели.
Моя проблема в том, что все примеры, которые я нашел, основаны либо на текстовом редакторе, либо на средстве просмотра изображений, либо используют стандартные размеры документов в диалоговом окне «Параметры страницы». Поскольку это общие типы документов, Cocoa в основном управляет разработчиком, поэтому код взаимодействия более или менее скрыт (или я просто не вижу его таким, какой он есть). Мой проект не соответствует ни одной из этих потребностей, и мне не нужно печатать. Вставить мою модель в свойство documentView не сработает.
Я просто ищу простой пример того, как инициализировать NSScrollers с помощью пользовательской объектно-ориентированной модели (documentView) и обрабатывать прокрутку и обновление на основе действий пользователя, например, когда пользователь перетаскивает предмет Объекты смещены влево или вниз, или размер окна изменяется. Я думаю, что я близок к тому, чтобы собрать все это вместе, но мне не хватает точки перехода, которая связывает элементы управления с документом.
(Не то, чтобы это имело значение в вопросе о Какао, но когда я делал это в REALbasic, я просто вычислял и применял MaxX, MaxY к максимальному значению ScrollBar на основе действий пользователя, следил за положением в ScrollBar, когда пользователь щелкает и рисует по мере необходимости. Кажется, NSScrollers в контексте NSScrollView не так очевидны для меня.)
Я ценю время, затрачиваемое всеми, но я обновляюсь с дополнительной информацией в надежде получить ответ, который я смогу использовать. Извините, но ничего из этого не имеет смысла, документы Apple тупые, но, возможно, я упускаю что-то до боли очевидное ...
У меня есть массив объектов, находящихся в подклассе NSDocument, которые являются держателями данных, которые сообщают drawRect, что и где рисовать. Это прямо из примера Sketch. В примере Sketch используются размеры документов в диалоговом окне «Параметры страницы», поэтому здесь нечего показывать. Я в порядке с Какао, обрабатывающим состояние полос прокрутки, но как мне связать ScrollView, чтобы увидеть первоначальное состояние редактора в NSDocument и обновления этих объектов и редактора? Должен ли я рассчитать свой собственный NSRect и передать его в NSScrollView? Где и как? Я делаю это в моем собственном NSView, который был встроен в NSScrollView или мой NSDocument в init? NSScrollView не создается программно (нет простого способа сделать это), поэтому он все сидит в Интерфейсном Разработчике, ожидая подключения. Я скучаю по битам.
Возможно, на этой неделе я надену свою кепку "Я не понимаю", но это не может быть таким трудным. Приложения для иллюстрации, MIDI-редакторы и множество других подобных пользовательских приложений делают это постоянно.
решено (в основном):
Я думаю, что я уже разобрался с этим, хотя, вероятно, это не лучшая реализация.
Мой класс документа теперь имеет свойство NSRect DocumentRect, которое просматривает все его объекты и возвращает новый NSRect на основе их местоположения. Я вызываю это в событиях мыши моего подкласса NSView с
[self setFrame:[[self EditorDocument] DocumentRect]];
Это обновляет размер представления в зависимости от взаимодействия с пользователем, и теперь окно обрабатывает прокрутку, как раньше. На данный момент я выясняю, как заставить рамку расширяться при перетаскивании, но, по крайней мере, теперь у меня есть фундаментальная концепция, которую я упустил.
Полученный ответ указал мне направление, в котором я должен был идти (для documentView требуется представление, что переводится как просмотр класса NSView), поэтому Питер получает кредит. Большое спасибо за помощь.