Программирование multi-touch в Mac OS X

    На новых MacBook, MacBookPro и MacBookAir есть такие виды жестов (gestures):

    двумя пальцами — скролл
    двумя пальцами — увеличение (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
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 15

      0
      Вопрос оффтопикс.
      Ребят подскажите а сообщение в терминале «make: command not found» это нормальное явление??
      если да то подскажите как сделать нормальную юникс систему из мака, просто надо собрать одну программку из бинарников.

        0
        xcode наверное поставить :)
          +1
          спасибо, сейчас прогуглю.
            0
            у меня установлен fink… если я правильно понял…
        –1
        А что такое swipe?

        PS:
        swipe
        1. сущ. 4. сленг. пенис
        © ABBYY Lingvo
          +2
          en-ru Bars говорит, что это «бить», «рычаг», «конюх» или «утянуть» ( в смысле «выкрасть»).

          >ротейт (rotate)

          Тоже повеселило :)
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              Исправил.
              +1
              Обычно это скольжение пальцем (или несколькими пальцами) вдоль поверхности тачпада/экрана
                0
                Я думаю, здесь актуально это значение:
                swipe — pass (a card with a magnetic strip) through an electronic device that reads it.
                +3
                пятью пальцами — …
                шестью пальцами — …
                  0
                  На не самых новых мбп тоже прекрасно работают четыре пальца. Включаются путем замены AppleUSBMultitouch.kext.
                    +1
                    Ещё можно добавить, что и в новых обычных макбуках (алюминиевых) мультитач есть, причём из коробки :)
                      0
                      Добавил вашу информацию в апдейт, если вы не против, конечно.
                      0
                      Можно ли надеятся что похожие функции будут доступны и под Windows для MacBook?

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое