【问题标题】:MacOS: Identify between NSMenuItem shortcut typed or mouse pressedMacOS:识别输入的 NSMenuItem 快捷方式或按下鼠标
【发布时间】:2017-12-20 20:32:21
【问题描述】:

我有 Mac 版 Spritekit 游戏。与普通 Mac 应用程序一样,它在菜单中包含 NSMenuItems。现在事情是这样的

  • 如果我用鼠标从菜单中选择一个动作,Spritekit 游戏会立即开始执行,并且会丢失一些后续动画。
  • 如果我使用键盘快捷键选择相同的操作,游戏会立即开始执行,但不会错过任何动画,因为从菜单动画切换到游戏动画没有延迟。

有什么方法可以确定菜单项发送的 IBAction 是由等效键盘触发还是由鼠标触发?如果使用鼠标,我想为游戏动画添加一个开始延迟,并且没有延迟等效键。

【问题讨论】:

  • 你能解释一下“动画被错过”是什么意思吗?激活后稍微延迟动作是否有帮助,例如300 毫秒?
  • @mschmidt,确实如此。我目前延迟了 400 毫秒,而且很好。问题在于,由于这个原因,等效键盘存在不必要的延迟,这对于用户体验来说不是最佳的。我只想要鼠标激活的短暂延迟,而键盘等价物没有延迟。据我所知,它们都以相同的 IBAction 结束,而我无法区分是哪个激活了该功能。
  • 啊,好的。通过键盘/鼠标激活可能会触发不同的回调。您是否测试过optional func menuNeedsUpdate(_ menu: NSMenu)NSMenuDelegate 是否在这两种情况下都被触发?键盘似乎没有必要,因为菜单不可见。

标签: swift macos cocoa uikit nsmenuitem


【解决方案1】:

读取NSApp.currentEvent.type可以获取当前事件的类型。

详情请参阅NSApp.currentEventNSEvent.type

【讨论】:

  • 这个似乎可以解决问题!我会将此检查添加到 IBAction。
猜你喜欢
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 2012-05-28
  • 2015-01-21
  • 1970-01-01
相关资源
最近更新 更多