setAcceptsTouchEvents仅在触控板上的手势后才能正常工作

时间:2012-08-30 13:19:42

标签: objective-c macos cocoa trackpad

我正在尝试使用setAcceptsTouchEvents:YES识别触控板上的自定义触控事件。只需触摸触控板,touchesBeganWithEvent就不会发生任何事情。但如果我在触控板上做捏或滚动的手势,touchesBeganWithEvent开始正常工作。在其中一个手势之后,即使我只是触摸触控板,touchesBeganWithEvent也能正常工作。但我需要使用touchesBeganWithEvent进行简单的触摸,而无需先做手势。它的方式似乎我必须做一个手势来初始化setAcceptsTouchEvents:YES。我做错了什么?

P.S。:setAcceptsTouchEvents:YESinitWithFrame中,我可以看到它在应用程序启动时执行。

2 个答案:

答案 0 :(得分:3)

我发现重启macOS后,或者只是注销并再次登录后,此问题就消失了。我试图做任何可能导致问题停止的事情,比如关闭macbook中的所有应用程序,切换桌面,将操作系统置于待机状态然后回来,但唯一能让问题消失的是注销或重新启动操作系统。

所以,当问题消失后,我启动我的应用程序,只需触摸触控板即可调度touchesBeganWithEvent。然后几个小时后问题再次出现,并且touchesBeganWithEvent不再有效,直到我做一个像捏或滚动的手势。如果我关闭我的应用程序并重新开始,我需要再次执行此操作。

有谁知道为什么会这样?

答案 1 :(得分:2)

来自docs

  

事件将在关键窗口中触摸下发送到视图。   获取为此视图(或其后代)开始的触摸集   此视图)发送[event touchesMatchingPhase:NSTouchPhaseBegan   inView:自]

一些想法:

  1. 确保没有后代视图拦截触摸事件。
  2. 在执行触摸事件之前尝试以编程方式将窗口设置为关键窗口,并查看是否会调用touchesBeganWithEvent。