我正在尝试创建一个简单的应用程序,其中有一个空的红色矩形,每当鼠标移动到矩形的上半部分边框时,光标将变为闭合的手.
我开始选择基础命令行项目.使用矩形制作透明NSWindow并嵌入其中NSView,制作窗口以接受鼠标移动事件(通过方法:) -setAcceptsMouseMovedEvents.我已经覆盖-canBecomeKeyWindow并且-canBecomeMainWindow窗口返回YES.但不知怎的,这些-mouseMoved事件都没有被收到NSView.
当我通过制作一个cocoa应用程序项目并在-applicationDidFinishLaunching方法中创建我的窗口来放置相同的代码时,我的视图能够接收-mouseMoved事件.
当我使用基础命令行实用程序项目时,为什么它不接收鼠标移动事件?
我还观察到,每当我通过基础cmd线实用程序项目创建一个窗口(碳或可可)时,即使单击标题栏,窗口也不会成为关键.单击标题栏颜色仍为浅灰色而不是变为深灰色.为什么会这样?
我已重写-canBecomeKeyWindow和-canBecomeMainWindow的NSwindow返回YES.
NSG*_*God 13
我同意约书亚已经说过的话.任何将要显示用户界面的应用程序,无论是不露面的后台进程还是在Dock中显示的应用程序,都应该采用应用程序包的形式,而不是基本工具模板之类的普通旧Mach-O可执行文件.创建.
此外,mouseMoved:默认情况下视图不响应事件的原因有以下几点:
mouseMoved:,因为跟踪区域更加有效和高效.前段时间,我写了一个小测试应用程序,演示了这两种方法之间的差异:

将鼠标移动到上方视图大约20秒会导致1000个事件,而在下方视图中,使用小于50的跟踪区域.
示例GitHub项目:https://github.com/NSGod/MouseMoved-vs-TrackingAreas
再次,正如约书亚所提到的那样,如果你能描述一下你想要完成的事情,将会有所帮助.如果你的应用程序需要是一个后台应用程序(LSUIElement == 1),并且呈现一个没有出现在Dock中的界面,那么有办法做到这一点(正如Josh所说,一个命令行,非捆绑的应用程序不是办法).
| 归档时间: |
|
| 查看次数: |
5468 次 |
| 最近记录: |