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

Представление документа
NSScrollView экземпляры предоставляют прокрутку услуг ее представлению документа. Это - единственное представление, что приложение должно обеспечить представление прокрутки. Представление документа ответственно за создание и управление содержанием, прокрученным представлением прокрутки.
Довольное представление
NSScrollView объекты включают представление документа в экземпляре NSClipView это упоминается как довольное представление. Довольное представление ответственно за управление позицией представления документа, отсечения представления документа к кадру представления содержания и обработки подробных данных прокрутки эффективным способом. Довольное представление прокручивает представление документа путем изменения его прямоугольника границ, определяющего, где находится кадр представления документа. Вы обычно не взаимодействуете с NSClipView классифицируйте непосредственно; это предоставлено прежде всего как машинное оборудование прокрутки для NSScrollView класс.
Полосы прокрутки
NSScroller класс обеспечивает средства управления, позволяющие пользователю прокручивать содержание представления документа. Представления прокрутки могут иметь горизонтальный скроллер, вертикальный скроллер, обоих или ни один. Если представление прокрутки сконфигурировано со скроллерами, NSScrollView класс автоматически создает и управляет надлежащими объектами управления. Приложение может настроить эти средства управления как требуется. Посмотрите, Как Скроллеры Взаимодействуют с Представлениями Прокрутки для получения дополнительной информации.
Линейки
Прокрутите представления, также поддерживают дополнительные горизонтальные и вертикальные линейки, экземпляры NSRulerView класс или пользовательский подкласс. Для разрешения настройки линейки поддерживают представления аксессуара, предоставленные приложением. Прокрутка линейки представления автоматически не устанавливает отношения с представлением документа; это - ответственность приложения установить представление документа как клиентское представление линейки и отразить позицию курсора и другие обновления статуса. Посмотрите Темы Программирования Линейки и Стиля абзаца для получения дополнительной информации.
Как работает прокрутка
Представление документа представления прокрутки расположено довольным представление, устанавливающее его прямоугольник границ таким способом, которым кадр представления документа перемещается относительно него. Последовательность действий между скроллерами и соответствующим представлением прокрутки и способом, которым выполняется прокрутка, включает немного больше подробности, чем это.
Прокрутка обычно происходит в ответ на пользователя, щелкающего по скроллеру или перетаскивающего кнопку прокрутки, отправляющую NSScrollView инстанцируйте частное сообщение действия, говоря ему прокрутить на основе состояния скроллера. Этот процесс описан в том, Как Скроллеры Взаимодействуют с Представлениями Прокрутки. Если Вы планируете реализовать свой собственный вид объекта скроллера, необходимо считать тот раздел.
NSClipView класс предоставляет низкоуровневую поддержку прокрутки через scrollToPoint: метод. Этот метод переводит источник прямоугольника границ представления содержания и оптимизирует, восстанавливают изображение путем копирования такого большого представленного представления документа, как остается видимым, только прося, чтобы представление документа нарисовало недавно представленные области. Это обычно улучшает прокрутку производительности, но может не всегда быть надлежащим. Можно повернуть это поведение от использования NSClipView метод setCopiesOnScroll: передача NO как параметр. Если Вы действительно оставляете копию на прокрутке активной, несомненно, прокрутят представление документа программно с помощью NSView метод scrollPoint: метод, а не translateOriginToPoint:.
Прокручивает ли представление документа явно в ответ на пользовательское действие или NSClipView сообщение, или неявно через a setFrame: или другое такое сообщение, довольное представление контролирует его близко. Каждый раз, когда кадр представления документа или прямоугольные изменения границ, это сообщает представлению прокрутки включения изменения с a reflectScrolledClipView: сообщение. Этот метод обновляет NSScroller объекты отразить позицию и размер видимой части представления документа.
Как скроллеры взаимодействуют с представлениями прокрутки
NSScroller общедоступный класс прежде всего для разработчиков, решающих не использовать экземпляр NSScrollView но хочу представить непротиворечивый пользовательский интерфейс. Его использованию за пределами взаимодействия с представлениями прокрутки обескураживают, кроме случаев, где портирование существующего приложения является более прямым.
Конфигурирование NSScroller экземпляр для использования с пользовательским контейнерным классом представления (или абсолютно различный вид цели) включает установление отношений целевого действия, как определено NSControl. В случае представления прокрутки целевой объект является довольным представление. Целевой объект ответственен за реализацию метода действия реагировать на скроллер, и также для обновления скроллеров в ответ на изменения в цели.
Поскольку скроллер отслеживает мышь, он отправляет сообщение действия в свой целевой объект, передавая себя как параметр. Целевой объект тогда определяет направление и масштаб надлежащего действия прокрутки. Это делает это путем отправки скроллера a hitPart сообщение. hitPart метод возвращает код части, указывающий, где пользователь щелкнул в скроллере. Таблица 1 показывает возможные коды, возвращенные hitPart метод.
Код части, возвращенный | Прокрутка поведения |
|---|---|
| Представление прокрутки не должно прокручивать вообще. |
| Представление прокрутки должно прокрутить вниз или вправо суммой, указанной |
| Представление прокрутки должно прокрутить или налево суммой, указанной |
| Представление прокрутки должно прокрутить вниз или вправо суммой, указанной |
| Представление прокрутки должно прокрутить или налево суммой, указанной |
| Представление прокрутки должно прокрутить непосредственно к горизонтальному или вертикальному расположению — зависящий от ориентации скроллера — возвращенный скроллером |
Целевой объект отслеживает размер и позицию его представления документа и обновляет скроллер для указания текущей позиции и видимой пропорции представления документа путем отправки надлежащих скроллеров a setFloatValue:knobProportion: сообщение, передавая текущее расположение прокрутки. Параметр пропорции кнопки является значением с плавающей точкой между 0 и 1, который указывает, как большой должна появиться кнопка в скроллере. NSClipView переопределения большая часть NSView setBounds... и setFrame... методы для выполнения этого обновления.