使用 touchesBegan 和 touchesMoved 事件处理程序监听 OS X 中的多点触控事件

listening for multitouch events in OS X using the touchesBegan and touchesMoved event handlers

我正在尝试记录用户在 2018 款 MacBook 触控板上执行的触摸和手指移动。

当我尝试测试 API 并在用户触摸触控板时打印到控制台时,我看不到任何输出。

如何侦听触摸事件并从中获取数据?

我提到了handling Trackpad events documentation。页面的处理多点触控事件部分说:

A view by default does not accept touch events. To handle touch events, your custom view must first call the NSView method setAcceptsTouchEvents: with an argument of YES.

但是,setAcceptsTouchEvents documentation 表示该方法已弃用。

当我尝试打印检测到触摸的日志以测试 API 是否正常工作时,我没有看到任何控制台输出。这是我的代码:

import Cocoa

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }

    override func touchesBegan(with event: NSEvent) {
        print("touched!");
    }

}

如何让控制台语句打印一些东西?

我一直在玩这个,这是我想出来的。

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the //view.
    //view.acceptsTouchEvents = true; //deprecated but works.deprecated
    view.allowedTouchTypes = [NSTouch.TouchTypeMask.direct, NSTouch.TouchTypeMask.indirect];
}

然后,您可以在触摸处于不同阶段时覆盖这些功能,如问题中所述。

请注意,在子类中执行“allowedTouchTypes”按摩是这样的:

import Cocoa

class UnView: NSView{
    override var allowedTouchTypes: NSTouch.TouchTypeMask {
        get { return [] } .. as you wish
        set { }
    }
    
}