Обнаружение удержания мыши - PullRequest
3 голосов
/ 01 апреля 2012

Я пытаюсь определить, когда мышь удерживают нажатой вместо нажатия.Это то, что у меня есть, но вместо подсчета кликов я хочу, чтобы можно было обнаружить нажатие мыши.

-(void)mouseDown:(NSEvent *)event;
{
    //instead of clickCount I want my if statement to be 
    // if the mouse is being held down.
    if ([event clickCount] < 1) 
    {

    }
    else if ([event clickCount] > 1)
    {

    }
}

Ответы [ 3 ]

9 голосов
/ 12 июля 2014

Начиная с OS X 10.6, вы можете использовать метод NSEvent pressedMouseButtons из любого места:

NSUInteger mouseButtonMask = [NSEvent pressedMouseButtons];
BOOL leftMouseButtonDown = (mouseButtonMask & (1 << 0)) != 0;
BOOL rightMouseButtonDown = (mouseButtonMask & (1 << 1)) != 0;

Метод возвращает индексы кнопок мыши, которые в данный момент находятся внизу, в виде маски.1 << 0 соответствует левой кнопке мыши, 1 << 1 - правой кнопке мыши, а 1 << n, n> = 2 - другим кнопкам мыши.

При этом нет необходимости ловить mouseDown:,mouseDragged: или mouseUp: событий.

4 голосов
/ 02 апреля 2012

Предположительно, вы хотите определить, удерживается ли мышь в течение определенного периода времени.Это довольно просто;это просто требует таймера.

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

- (void)mouseDown: (NSEvent *)theEvent {
    mouseTimer = [NSTimer scheduledTimerWithTimeInterval:mouseHeldDelay
                                                  target:self
                                                selector:@selector(mouseWasHeld:)
                                                userInfo:theEvent
                                                 repeats:NO];
}

В mouseUp:, уничтожьте таймер:

- (void)mouseUp: (NSEvent *)theEvent {
    [mouseTimer invalidate];
    mouseTimer = nil;
}

Если таймерсрабатывает, затем вы знаете, что кнопка мыши удерживалась в течение указанного вами периода времени, и вы можете выполнять любые действия, которые вам нравятся:

- (void)mouseWasHeld: (NSTimer *)tim {
    NSEvent * mouseDownEvent = [tim userInfo];
    mouseTimer = nil;
    // etc.
}
0 голосов
/ 02 апреля 2012

Насколько я помню, mouseDown срабатывает только тогда, когда пользователь впервые щелкает элемент, а не когда удерживается нажатой.

Решением вашей проблемы является определение BOOL в вашем .h следующим образом:

bool mouseIsHeldDown = false;

Тогда в вашей мышкеВниз:

mouseIsHeldDown = true;

А в твоей мышке UP:

mouseIsHeldDown = false;

Затем вы можете проверить, находится ли mouseIsHeldDown = true в любом месте вашего кода.

Надеюсь, это решит вашу проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...