使用 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 { }
}
}
我正在尝试记录用户在 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 { }
}
}