【问题标题】:listening for multitouch events in OS X using the touchesBegan and touchesMoved event handlers在 OS X 中使用 touchesBegan 和 touchesMoved 事件处理程序监听多点触控事件
【发布时间】:2020-03-19 02:49:50
【问题描述】:

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

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

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

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

默认情况下视图不接受触摸事件。要处理触摸事件,您的自定义视图必须首先调用 NSView 方法 setAcceptsTouchEvents:,并带有 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!");
    }

}

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

【问题讨论】:

  • 来自 NSView.h:@property BOOL acceptsTouchEvents NS_DEPRECATED_MAC(10_6, 10_12_2, "Use allowedTouchTypes instead");
  • 请阅读代码所需的 Markdown;您的所有代码块格式不正确,并且未显示您要包含的完整代码。

标签: swift macos gesture trackpad multitouch-keyboard


【解决方案1】:

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

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];
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    相关资源
    最近更新 更多