在运行时更改应用程序图标

Posted

技术标签:

【中文标题】在运行时更改应用程序图标【英文标题】:Change app icon during runtime 【发布时间】:2015-01-15 21:08:18 【问题描述】:

在 OSX 10.5+ 中,应用程序图标绘制在小型化窗口上。

Mac Developer Library :: AppKit Framework Reference > NSDockTile > setShowsApplicationBadge:

默认情况下,微型化窗口包含应用程序标记,以将相关的应用程序传达给用户。在 OS X v10.5 及更高版本中,应用程序磁贴不支持应用程序徽章。具有自定义视图的小型化窗口不会绘制应用程序徽章。应用程序图标由NSDockTile 对象自动定位在磁贴中。

注意“应用程序图标自动定位在磁贴中”。

如何使用 Objective-c 更改应用程序图标?还是其他方法?

【问题讨论】:

【参考方案1】:

您可以使用-[NSApplication setApplicationIconImage:] 或向-[NSDockTile setContentView:] 提供视图(如NSImageView)。

【讨论】:

感谢 DarkDust,如果我设置应用程序图标图像,它会更改停靠图标,但不会更改小型化窗口上的图标。这是预期的吗?你有火狐吗?如果你是你,你可以安装插件DevPrefs,用 Shift + F4 打开 scrtachpad,转到顶部的菜单栏并将“环境”设置为“浏览器”。然后复制此要点HERE 并将IMAGE_PATH 设置为桌面上的图像并运行脚本。它确实setApplicationIconImage,但它不会更新迷你窗口。 这是Firefox中setApplicationIconImage之后的效果图,红色箭头指向小窗口中保持不变的小图标:i.imgur.com/hsRTSk6.png 我不知道这种行为是否有意。我找到了nice demo project(以 ZIP 格式下载并打开“Play With Dock”项目)。我在 OS X 10.10 上看到了您在此处描述的相同行为(以及在您的其他一些类似问题中),不知道其他版本。最小化窗口上的图标始终是此处的捆绑图标。但是您可以从最小化窗口中删除应用程序图标:[[self.window dockTile] setShowsApplicationBadge:NO]; 哈哈谢谢很好的发现。我的主题之间存在细微差别。就像捆绑包(1)图标关联,然后(2)在图标更改时强制更新appbundle,然后(3)在迷你窗口上设置迷你图标。我尝试了[[self.window dockTile] setShowsApplicationBadge:NO];,您可以在此处看到 sn-p 并运行与运行以前的 sn-p 相同,但最小化具有选项卡的浏览器窗口:GitHubGIST :: Noitidart / _ff-addon-snippet-ObjC_SetShowsApplicationBadge.js 该函数对 >=10.5没有任何作用> 我认为将 setShowsApplicationBadge 设置为 false 然后设置为 true 会更新它,但它没有。然后我还尝试对某些东西执行 setMiniwindowImage 然后返回 nil 希望它会更新但也没有更新它,因为 sn-p 在这里:GitHubGIST :: Noitidart /_ff-addon-snippet-ObjC_SetMiniwindowImage.js。 :(您认为我可以尝试更新那个吸盘迷你图标的任何其他想法吗?

以上是关于在运行时更改应用程序图标的主要内容,如果未能解决你的问题,请参考以下文章

iOS 在运行时更改应用程序图标

在运行时更改应用程序的图标

在 KIVY 中运行程序时如何更改窗口上的图标

最近应用程序菜单中的应用程序图标未更改

Delphi 在应用程序运行时更改主窗体

本地通知触发时更改图标徽章编号