Пользовательские события (OS X)
Событие является объектом, инкапсулирующим информацию о действии, которое пользователь делает с мышью, клавиатурой или другим устройством ввода данных. Платформа AppKit поставляет большинство событий для обработки к представлению, где произошло действие. AppKit определяет много различных типов событий, включая следующее:
Когда пользователи перемещают мышь и нажимают ее кнопки, события от нажатия мыши отправляются. AppKit категоризирует события, сгенерированные мышью в общий тип, направление щелчка и кнопку мыши. Общие типы являются щелчками мышью, мышь перетаскивает, и движения мыши (без нажатой кнопки).
Когда использование нажимает клавиши клавиатуры, ключевые события сгенерированы. Определенные ключевые события являются ключевыми вниз, настраивают, и флаги изменились (последний раньше обнаруживал нажатые модифицирующие клавиши).
Когда пользователи делают мультисенсорные перемещения на сенсорной панели, события сенсорной панели сгенерированы. Существует два общих вида, события жеста и сенсорные события.
События планшета происходят из планшетных устройств и могут указать или близость к планшету или точку на планшете. Определенные события от нажатия мыши также сгенерированы как события планшета.
События области отслеживания сгенерированы, когда курсор мыши вводит область отслеживания, перемещается в ней и оставляет ее. Для этих действий AppKit отправляет отслеживание мыши, перемещенное в мышь, и сообщения обновления курсора к объекту обработки.
AppKit объявляет, что константы представляют большинство типов событий. Это также объявляет методы, которые необходимо переопределить для обработки событий определенных типов и категорий.
Событие и сенсорные объекты
Когда AppKit вызывает метод обработки событий, он передает в NSEvent
объект. Этот объект инкапсулирует информацию, связанную с пользовательским действием, таким как тип события, метка времени и связанное окно. В зависимости от типа события информация может также включать расположение события в окне, числе щелчков мышью, символы Unicode (для нажатия клавиши), и модифицирующие клавиши, если таковые имеются, которые были нажаты.
NSTouch
записи объекта определенное касание к сенсорной панели в определенный момент. Это не является персистентным всюду по мультисенсорной последовательности; AppKit создает новые экземпляры прогресс последовательности. Однако можно следовать за касанием через его время жизни через свойство идентификационных данных. Событие жеста является серией сенсорных объектов, которые AppKit распознает как стандартный жест (например. вращайтесь или сильно ударьте).
Поставка события
События начинаются как асинхронный поток низкоуровневых уведомлений, поставленных приложению через его основной цикл событий. В основном цикле событий приложение получает событие от своей очереди событий, преобразовывает его в NSEvent
объект, и поставляет его надлежащему объекту для обработки. После того, как событие обрабатывается, это получает следующее событие в очереди, отгрузки это, и т.д.
Путь поставки события варьируется типом и категорией события. Обычно объект приложения (NSApp
) отправляет событие в окно, в котором произошло пользовательское действие, и окно поставляет событие представлению, в котором произошло пользовательское действие. Для большинства ключевых событий то представление является первым респондентом; для мыши, планшета и событий сенсорной панели, представление является тем, в котором имели место щелчок мышью, перемещение стилуса или жест. Если целевое представление не обрабатывает событие, перемещения события цепочка респондента, пока это или не обрабатывается или отбрасывается.
Обработка события
Обработать событие, класс респондента (обычно пользовательское представление) первые переопределения acceptsFirstResponder
метод (NSResponder
) возвратиться YES
. (Представление по умолчанию не реагирует на события.) Это тогда реализует один или несколько методов, объявленных NSResponder
класс для событий определенных типов и характеристик, такой как mouseUp:
, keyDown:
, и tabletProximity:
.
Много реализаций обработки событий исследуют переданный - в NSEvent
объект. Для большей части мыши, планшета и других событий, Вы получаете расположение события и преобразовываете то расположение в систему локальной координаты представления. Вы могли бы также хотеть проверить тип события, подтип, метку времени и флаги модификатора. При завершенной обработке события не вызывайте реализацию суперкласса метода. Если Вы не обрабатываете событие, или обрабатываете его только частично, передаете его цепочка респондента путем вызова реализации суперкласса.
События жеста обрабатываются тот же путь как другие события. Вы реализуете методы такой как magnifyWithEvent:
и rotateWithEvent:
.NSEvent
класс определяет методы доступа такой как magnification
и rotation
это дает Вам информацию, необходимо обработать событие.