【问题标题】:setAcceptsTouchEvents only works fine after a gesture on trackpadsetAcceptsTouchEvents 仅在触控板上的手势后才能正常工作
【发布时间】:2012-10-22 22:07:01
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c macos cocoa trackpad


    【解决方案1】:

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

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

    有人知道为什么会这样吗?

    【讨论】:

    • 您找到解决方案了吗?我遇到了同样的问题。
    【解决方案2】:

    来自docs

    该事件将被发送到按键窗口中触摸下的视图。 获取为此视图开始的一组触摸(或 此视图)发送 [event touchesMatchingPhase:NSTouchPhaseBegan inView:self]。

    一些想法:

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

    【讨论】:

    • 这些似乎都没有帮助。创建NSView 的子类,将其设置为接收触摸事件,将其添加到窗口:这足以展示提问者的问题。制作视图键似乎没有帮助。 :\
    猜你喜欢
    • 2016-03-08
    • 2023-03-18
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多