- [NSResponder swipeWithEvent:] не вызывается - PullRequest
7 голосов
/ 15 сентября 2011

Я пишу приложение для OS X Lion и Snow Leopard.У меня есть мнение, что я хочу иметь возможность реагировать на события смахивания.Насколько я понимаю, три пальца вызовет -[NSResponder swipeWithEvent:], если этот метод реализован в моем пользовательском представлении.Я уже рассмотрел этот вопрос и соответствующие ответы и попробовал следующую модифицированную реализацию заглушки кода Оскара Дель Бена:

@implementation TestView

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (void)drawRect:(NSRect)dirtyRect
{
    [[NSColor redColor] set];
    NSRectFillUsingOperation(dirtyRect, NSCompositeSourceOver);
}

- (void)swipeWithEvent:(NSEvent *)event {
    NSLog(@"Swipe event detected!");
}

- (void)beginGestureWithEvent:(NSEvent *)event {
    NSLog(@"Gesture detected!");
}

- (void)endGestureWithEvent:(NSEvent *)event {
    NSLog(@"Gesture end detected!");
}

- (void)mouseDown:(NSEvent *)theEvent {
    NSLog(@"mouseDown event detected!");
}

@end

Это компилируется и работает нормально, и представление отображается какожидается.Событие mouseDown: правильно зарегистрировано.Однако ни одно из других событий не запускается .Ни методы begin/endGestureWithEvent:, ни метод swipeWithEvent:.Что заставляет меня задуматься: нужно ли где-то устанавливать настройки проекта / приложения, чтобы правильно получать и / или интерпретировать жесты?Заранее спасибо за помощь.

Ответы [ 4 ]

10 голосов
/ 08 декабря 2011

Чтобы получать сообщения swipeWithEvent: , необходимо убедиться, что жест 3 пальца не сопоставлен ни с чем, что может вызвать конфликт. Перейдите в «Системные настройки» -> «Трекпад» -> «Другие жесты» и установите для этих предпочтений одно из следующих значений:

  • Проведите между страницами:

    1. Проведите двумя или тремя пальцами или
    2. Проведите тремя пальцами

  • Проведите между полноэкранными приложениями:

    1. Проведите влево или вправо четырьмя пальцами

В частности, не следует назначать пролистывание между полноэкранными приложениями тремя пальцами, иначе вы не получите swipeWithEvent: сообщений.

Вместе эти два параметра предпочтения заставляют swipeWithEvent: отправлять сообщения первому респонденту.

Конечно, вам все еще нужно реализовать реальную логику свайпов. И если вы хотите выполнить плавную прокрутку в стиле iOS, вам потребуется проделать еще немного работы. Пример того, как это сделать, приведен в заметках о выпуске Lion App Kit в разделе «Отслеживание движения жидкости».

См. http://developer.apple.com/library/mac/#releasenotes/Cocoa/AppKit.html

2 голосов
/ 11 апреля 2012

попробуйте с [self setAcceptsTouchEvents:YES];, где написано // Initialization code here.

1 голос
/ 16 сентября 2011

Не уверен, что это проблема, но только ключевое окно получает жесты.Ваш ключ от окна?

0 голосов
/ 15 сентября 2011

Ваш взгляд принимает первых респондентов?

- (BOOL) acceptsFirstResponder
{
  return YES;
}
...