【发布时间】: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