Objective c 如何创建一个类似iTunes迷你播放器的NSWindow(始终位于顶部,但没有焦点!)
我有一个无边界窗口,其中有一个webview,它始终位于顶部。 我想创建一个NSWindow,它是:Objective c 如何创建一个类似iTunes迷你播放器的NSWindow(始终位于顶部,但没有焦点!),objective-c,cocoa,nswindow,Objective C,Cocoa,Nswindow,我有一个无边界窗口,其中有一个webview,它始终位于顶部。 我想创建一个NSWindow,它是: 永远在最上面 不会从当前前台应用程序获取焦点 是否启用用户-鼠标交互(不强制用户将焦点切换到它-也称为“单击它两次”) 我遇到的问题是,要与窗口交互(例如,查看悬停效果,或单击webview中的链接),用户必须单击窗口(使其具有焦点),然后才会显示悬停效果 我如何制作一个像iTunes mini player这样的窗口,它不需要当前应用程序的焦点,但也可以与鼠标交互?(见下面的屏幕截图) 谢谢
要接收
鼠标输入:
、鼠标移动:
和鼠标退出:
事件,即使应用程序未处于活动状态,也必须在窗口中的某些视图中添加跟踪区域,并相应地设置跟踪区域的属性
看一看
您可能需要添加一个带有选项的跟踪区域,这些选项包括
nstrackingActivatealways
和NSTrackingMouseEnteredAndExited
,mouseEntered:
,mouseExited:
事件,即使您的应用程序未处于活动状态,您必须将跟踪区域添加到窗口中的某个视图中,并相应地设置跟踪区域的属性
看一看
您可能需要添加一个跟踪区域,其中包含选项
NSTrackingActiveAlways
和nstrackingamouseenteredandexited
似乎-(BOOL)acceptsFirstMouse:(NSEvent*)事件完成了我想要的一半,另一半在窗口不活动时也接受“鼠标移动事件”。(因为我想有一个悬停效果,就像迷你播放器一样)看起来-(BOOL)接受firstmouse:(NSEvent*)这个事件做了我想要的一半,另一半在窗口不活动时也接受“鼠标移动事件”。(因为我想有一个悬停效果,就像迷你播放器一样)我这样做了,但后来我尝试将事件传递到webview,但没有成功-所以它没有显示悬停效果(由鼠标移动事件引起),那么你的问题在于如何传递事件。为什么不以本机方式处理事件,并在web内容的javascript中有一个回调来显示/隐藏控件呢?如果网页处于焦点位置,它就可以正常工作。使用css:悬停按钮显示和取消显示,如我所愿。但是当webview没有焦点时,即使安装了NSTrackingArea,它也不会接收鼠标事件。现在的目标是-我要我通过跟踪区域将事件捕获传递给webview。你不能,webview就是不能这样工作。解决方案是在web内容中安装一些javascript以显示悬停效果,并从应用程序调用。如果有时间的话,我稍后会制作一个示例应用;)正如我之前解释的那样。无论您编写什么java脚本,它都不会接收任何鼠标悬停事件,除非NSWindow处于活动状态!正如这个问题的标题明确指出的那样,NSWindow必须位于顶部,但不能有焦点(如iTunes miniplayer)。因此,请不要费心编写任何javascript:)我这样做了,但后来我尝试将事件传递到webview,但没有成功-因此它没有显示悬停效果(由鼠标移动事件引起),那么您的问题在于如何传递事件。为什么不以本机方式处理事件,并在web内容的javascript中有一个回调来显示/隐藏控件呢?如果网页处于焦点位置,它就可以正常工作。使用css:悬停按钮显示和取消显示,如我所愿。但是当webview没有焦点时,即使安装了NSTrackingArea,它也不会接收鼠标事件。现在的目标是-我要我通过跟踪区域将事件捕获传递给webview。你不能,webview就是不能这样工作。解决方案是在web内容中安装一些javascript以显示悬停效果,并从应用程序调用。如果有时间的话,我稍后会制作一个示例应用;)正如我之前解释的那样。无论您编写什么java脚本,它都不会接收任何鼠标悬停事件,除非NSWindow处于活动状态!正如这个问题的标题明确指出的那样,NSWindow必须位于顶部,但不能有焦点(如iTunes miniplayer)。因此,请不要费心编写任何javascript:)