我为自己制作了一个小应用程序,定期更改桌面背景图像。
我的程序包含以下代码块:
let screen = NSScreen.main()!
let newWallpaperURL = URL(/* ... */)
// ...
try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: screen, options: [:])
这是有效的,但仅适用于当前的#34;空间"键盘专注于。
e.g。如果我在全屏应用中,只会更改Space占用的全屏应用的背景(而不是我普通桌面的背景)。 如果我有两个Spaces / desktops,它只会改变其中一个的背景图像。
是否可以通过编程方式为每个空格单独设置壁纸?
答案 0 :(得分:0)
您可以获取所有屏幕并设置所有屏幕。
let screens = NSScreen.screens
let newWallpaperURL = URL(/* ... */)
for i in screens {
try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: i, options: [:])
}
答案 1 :(得分:0)
在Xcode 8.x中使用它:
if let screens = NSScreen.screens() {
let newWallpaperURL = URL(/* ... */))
for screen in screens {
try? NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: screen, options: [:])
}
}
与此处发布的其他解决方案不同,此版本适用于当前的Xcode 8. NSScreen.screens
是Xcode 9中的类var (目前是测试版),但是类func 在Xcode 8中,这就是你需要放.screens()
而不是.screens
的原因。此外,screens
返回一个可选项,因此您需要在将其传递给for
循环之前安全地展开它。