我试图通过以下代码获得MacBook Pro触控板的压力:
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;
}
你知道怎么做吗?
最佳答案
如果设备支持,则压力数据可用(即力触式轨迹板)。Force Touch触控板自2015年左右开始在MacBooks上销售。在Magic触控板上也可以使用Force Touch。
This blog post有一种检测力触设备的方法,尽管我没有尝试。
我的机器是一个2016 MacBook Pro,带有一个Force Touch触控板。我可以通过这个代码得到压力:
[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年的MacBook Pro来说很管用。注意,这台机器有一个力触式触控板。我不确定如果没有力触式触控板,这会在机器上返回什么。但是希望这能给你更多的想法。
Force touch for developers
NSEvent - pressure