2014-09-12 5 views
3

내가 다음 코드를 사용하여 맥북 프로 트랙 패드 압력을 얻으려고 트랙 패드 압력을 받기 :맥 OS는 전 세계적으로

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 | 이벤트 Number : (NSInteger) windowNum 컨텍스트 : (NSGraphicsContext *) 컨텍스트 eventNumber : (NSInteger) eventNumber clickCount : (NSEvent *) mouseEventWithType : (NSEventType) 유형 위치 : (NSPoint) 위치 modifierFlags : (NSInteger) 클릭 번호 압력 : (float) 압력 – davidcondrey

+0

이것은 가장 가까운 해결책입니다 https://github.com/jnordberg/FingerMgmt – pravdomil

답변

1

기기가 압력 데이터를 지원하는 경우 사용할 수 있습니다 (예 : 강제 터치 트랙 패드). 강제 터치 트랙 패드는 2015 년 이후 MacBook에 제공됩니다. 강제 터치는 Magic Trackpad에서도 사용할 수 있습니다.

This blog post에는 시도하지는 않았지만 터치 터치 장치를 감지하는 방법이 있습니다.

내 컴퓨터는 강제 터치 트랙 패드가있는 2016 MacBook Pro입니다. 이 코드를 사용하여 압력을 얻을 수 있습니다 :

[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도 나옵니다. 그래서 나는 당신이하지 않는 곳에서 가치를 얻습니다 - 당신은 강제로 하드웨어를 가지고 있지 않습니까? 그러나 나는 실제 압력 값을받지 못한다.

나는 이벤트 탭을 사용하여이를 얻는 방법을 모르겠습니다.

나를 위해 2016 맥북 프로에서 작동합니다. 이 기계에는 힘 터치 트랙 패드가 있습니다. 강제 터치 트랙 패드가없는 컴퓨터에서는 이것이 반환되지 않습니다. 그러나 이것으로 더 많은 아이디어를 얻을 수 있기를 바랍니다.

Force touch for developers

NSEvent - pressure

0

MacBook에 내장 된 트랙 패드는 압력에 민감하지 않으며 터치되는 영역의 너비 만 측정합니다.이 영역은 일반적으로 압력이 증가함에 따라 증가하여 압력을 시뮬레이션합니다.

압력과 관련이있는 Apple 개발자 문서가 있지만 (위에 언급 된 내용에 링크되어 있음) Wacom 태블릿과 같은 압력을 측정하는 외부 정제에서만 사용할 수 있습니다.

+0

그 정보가 오래된 것 같습니다. 포스 터치 트랙 패드는 분명히 이것을 지원하며 2015 년경부터 사용 가능합니다. Apple의 개발자 사이트를 참조하십시오 : "드로잉 및 기타 창의적인 응용 프로그램은 트랙 패드의 압력 감지 기능을 활용하여 선을 더 두껍게 만들거나 변화하는 스타일. " (https://developer.apple.com/macos/force-touch/) – TheNextman