На новых MacBook, MacBookPro и MacBookAir есть такие виды жестов (gestures):
двумя пальцами — скролл
двумя пальцами — увеличение (magnify)
двумя пальцами — поворот (rotate)
тремя пальцами — swipe вертикальный
тремя пальцами — swipe горизонтальный
четырьмя пальцами — swipe вертикальный
четырьмя пальцами — swipe горизонтальный
Как пользоваться этими жестами, подробно показано в System Preferences->TrackPad.
Документация по мультитачу, вообще говоря, закрытая. Открыть ее обещали в 10.6.
Ниже — вкратце, то, что получилось найти в интернете и узнать из своих экспериментов.
Суть такая:
в наследнике NSResponder-а (в NSView или в NSWindow, как понравится) добавляем следующие функции (или некоторые из них):
Подробнее об эти функциях.
вызывается в начале любого жеста, в том числе и скролла двумя пальцами, за исключениеми жестов четырьмя пальцами, которые обрабатывает система и «не отпускает» в приложение. Определить, какой именно жест начинается у меня не получилось.
вызывается в конце любого жеста (опять таки, кроме четырехпалого).
В этой функции главным параметром явлеятся
В моей программе коэффициент = 1000.
Главный параметр:
Эта функция срабатывает и при вертикальном, и при горизонтальном swipe.
Главные параметры
Существует небольшая проблема, которая заключается в том, что, когда ты начинаешь делать rotate, может сработать и magnify. Поэтому надо создать какой-то флаг, который при начале rotate блокирует magnify, и наоборот.
В Preview, скорее всего, сделано примерно также.
Жесты четырех пальцев, как уже было написано, перехватывает система и, видимо, приложение их обработать не может.
Все очень подробно описывается здесь:
http://cocoadex.com/2008/02/nsevent-modifications-swipe-ro.html
http://www.cocoadev.com/index.pl?MultiTouchTrackpad
UPDATE.
Как указал himmelherz, на не самых новых MacBookPro тоже прекрасно работают четыре пальца. Включаются путем замены AppleUSBMultitouch.kext.
Подбробности тут http://forums.macrumors.com/showthread.php?t=582801&page=8
двумя пальцами — скролл
двумя пальцами — увеличение (magnify)
двумя пальцами — поворот (rotate)
тремя пальцами — swipe вертикальный
тремя пальцами — swipe горизонтальный
четырьмя пальцами — swipe вертикальный
четырьмя пальцами — swipe горизонтальный
Как пользоваться этими жестами, подробно показано в System Preferences->TrackPad.
Документация по мультитачу, вообще говоря, закрытая. Открыть ее обещали в 10.6.
Ниже — вкратце, то, что получилось найти в интернете и узнать из своих экспериментов.
Суть такая:
в наследнике NSResponder-а (в NSView или в NSWindow, как понравится) добавляем следующие функции (или некоторые из них):
- (void)beginGestureWithEvent:(NSEvent*) anEvent; //начало жеста
- (void)endGestureWithEvent:(NSEvent*) anEvent; //конец жеста
- (void)magnifyWithEvent:(NSEvent*) anEvent; // масштабирование двумя пальцами
- (void)rotateWithEvent:(NSEvent*) anEvent; // повороты двумя пальцами
- (void)swipeWithEvent:(NSEvent*) anEvent; // жест тремя пальцами
Подробнее об эти функциях.
- (void)beginGestureWithEvent:(NSEvent*) anEvent;
вызывается в начале любого жеста, в том числе и скролла двумя пальцами, за исключениеми жестов четырьмя пальцами, которые обрабатывает система и «не отпускает» в приложение. Определить, какой именно жест начинается у меня не получилось.
- (void)endGestureWithEvent:(NSEvent*) anEvent;
вызывается в конце любого жеста (опять таки, кроме четырехпалого).
- (void)magnifyWithEvent:(NSEvent*) anEvent; // масштабирование двумя пальцами
В этой функции главным параметром явлеятся
[anEvent deltaZ]
. Его надо домножить на подходящий коэффициент.В моей программе коэффициент = 1000.
- (void)rotateWithEvent:(NSEvent*) anEvent; // повороты двумя пальцами
Главный параметр:
[anEvent rotation]
. Угол поворота измеряется в градусах, положительное направление — против часовой стрелки.- (void)swipeWithEvent:(NSEvent*) anEvent; // жест тремя пальцами
Эта функция срабатывает и при вертикальном, и при горизонтальном swipe.
Главные параметры
[anEvent deltaX]
и [anEvent deltaY]
могут быть равны 1.0 и -1.0 в зависимости от направления swipe.Существует небольшая проблема, которая заключается в том, что, когда ты начинаешь делать rotate, может сработать и magnify. Поэтому надо создать какой-то флаг, который при начале rotate блокирует magnify, и наоборот.
В Preview, скорее всего, сделано примерно также.
Жесты четырех пальцев, как уже было написано, перехватывает система и, видимо, приложение их обработать не может.
Все очень подробно описывается здесь:
http://cocoadex.com/2008/02/nsevent-modifications-swipe-ro.html
http://www.cocoadev.com/index.pl?MultiTouchTrackpad
UPDATE.
Как указал himmelherz, на не самых новых MacBookPro тоже прекрасно работают четыре пальца. Включаются путем замены AppleUSBMultitouch.kext.
Подбробности тут http://forums.macrumors.com/showthread.php?t=582801&page=8