如何手动创建动态(深色/浅色)NSImage实例?

时间:2018-10-17 07:22:01

标签: objective-c cocoa macos-mojave macos-darkmode

在macOS 10.14 Mojave中,创建自动绘制浅色和深色版本的NSImage实例的唯一方法是通过资产目录和+[NSImage imageNamed:]。但是,我需要在运行时创建动态图像,并且似乎没有不使用私有API的方法。

在幕后,似乎_appearanceName引入了私有财产NSImageRep,该私有财产以某种方式用于选择正确的表示形式。应该直接创建一个NSImage的图像表示形式,并设置相应的_appearanceName,但是我想避免这种情况。

我找到了一个简单的解决方法(在下面发布),但是当系统外观发生变化(即用户从浅色切换到深色或反之亦然)时,或者在具有{ {1}}属性设置为不同的外观(例如,一个视图硬编码为暗模式,另一视图硬编码为亮模式)。

那么,我如何手动创建动态appearance来正确显示明暗版本,就像资产目录图像一样?


NSImage

1 个答案:

答案 0 :(得分:1)

D'uh,事实证明,问题中发布的代码正常!实际上,在适当的时间调用了绘图处理程序 ,并且确实处理了所有外观情况。

但是,我有用于缩放和缓存这些图像的代码,它仍然使用古老的if !(PlayerPrefs.HasKey("Bulan_hp")) { // You can set this value to playerprefs PlayerPrefs.SetInt("Bulan_hp", 20); } // Then call get value bulan_fullhp = PlayerPrefs.GetInt("Bulan_hp"); 绘制图像的方式,而不是使用bulan_fullhp = PlayerPrefs.GetInt("Bulan_hp", 20);