2014-09-12 5 views
3

Я пытаюсь получить MacBook Pro давление трекпад с помощью следующего кода:MacOS Получить давление трекпада глобально

CGEventRef eventTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef eventRef, void *refcon) { 
    NSEvent *event = [NSEvent eventWithCGEvent:eventRef]; 

    NSLog(@"%lld", (int64_t)CGEventGetIntegerValueField(eventRef, kCGMouseEventPressure)); // returns 0 
    NSLog(@"%lld", (int64_t)CGEventGetIntegerValueField(eventRef, kCGTabletEventPointPressure)); // returns 0 
    NSLog(@"%lld", (int64_t)CGEventGetIntegerValueField(eventRef, kCGTabletEventTangentialPressure)); // returns 0 

    NSLog(@"%f", [event pressure]); // Assertion failure 

    return eventRef; 
} 

Есть ли у вас какие-либо идеи, как это сделать?

+1

Просто ссылка, которую я нашел .. может или не может быть полезным .. https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/ Классы/NSEvent_Class/Reference/Reference.html # // apple_ref/occ/instm/NSEvent/tangentialPressure | + (NSEvent *) mouseEventWithType: (NSEventType) тип местоположения: (NSPoint) модификатор местоположенияFlags: (NSUInteger) flags timestamp: (NSTimeInterval) time windowNumber: (NSInteger) windowNum context: (NSGraphicsContext *) context eventNumber: (NSInteger) eventNumber clickCount: (NSInteger) clickNumber давление: (плавающее) давление – davidcondrey

+0

это самое близкое решение https://github.com/jnordberg/FingerMgmt – pravdomil

ответ

1

Данные давления доступны, если устройство поддерживает его (т. Е. Трекпады с сенсорным усилием). Форсированные сенсорные трекпады поставляются на MacBooks примерно с 2015 года. Принудительное касание также доступно на Magic Trackpad.

This blog post имеет способ обнаружения устройств прикосновения к силе, хотя я не пробовал.

Моя машина MacBook Pro 2016 с сенсорным трекпадом. Я могу получить давление, используя этот код:

[self.window trackEventsMatchingMask:NSEventMaskPressure 
    timeout:NSEventDurationForever 
    mode:NSEventTrackingRunLoopMode 
    handler:^(NSEvent * _Nonnull event, BOOL * _Nonnull stop) { 
     NSLog(@"%f", event.pressure); 
    }]; 

Выход:

2018-02-09 18:16:10.986036-0800 forcetouch[4587:4164200] 0.437820 
2018-02-09 18:16:10.993772-0800 forcetouch[4587:4164200] 0.457504 
2018-02-09 18:16:11.001883-0800 forcetouch[4587:4164200] 0.476486 
2018-02-09 18:16:11.010654-0800 forcetouch[4587:4164200] 0.494812 
2018-02-09 18:16:11.017738-0800 forcetouch[4587:4164200] 0.512497 
2018-02-09 18:16:11.028129-0800 forcetouch[4587:4164200] 0.529556 
2018-02-09 18:16:11.033769-0800 forcetouch[4587:4164200] 0.546021 
2018-02-09 18:16:11.042117-0800 forcetouch[4587:4164200] 0.561905 
2018-02-09 18:16:11.049869-0800 forcetouch[4587:4164200] 0.577240 

Однако, я вижу, вы используете кран событий.

Я пробовал ваш код, и когда я проверяю kCGMouseEventPressure, я получаю 1. Когда я проверяю event.pressure, я также получаю 1. Поэтому я получаю значение, когда вы этого не делаете - я полагаю, у вас нет силового оборудования? Но я не получаю фактическое значение давления.

Я не уверен, как получить это, используя кран событий.

Это работает для меня на MacBook Pro 2016 года. Обратите внимание, что этот аппарат имеет сенсорный трекпад. Я не то, что это вернет на машине без сенсорного трекпада. Однако, надеюсь, это даст вам еще несколько идей.

Force touch for developers

NSEvent - pressure

0

Встроенный трекпад MacBook не чувствителен к давлению, он измеряет только ширину затронутой области, которая обычно увеличивается по мере увеличения давления, чтобы имитировать давление.

Есть некоторые документы разработчика Apple (связанные в комментарии выше), которые относятся к давлению, но они применимы только к внешним таблеткам, которые измеряют давление, такое как таблетки Wacom.

+0

Это, похоже, устаревшая информация. Силовые сенсорные трекпады определенно поддерживают это и доступны с тех пор (я думаю) около 2015 года. См. Сайт разработчика Apple: «Рисование и другие креативные приложения могут использовать возможности сенсорного трекинга, чтобы сделать линии толще или дать кисть меняя стиль ". (Https://developer.apple.com/macos/force-touch/) – TheNextman

Смежные вопросы