1

我正在为自己制作一个小应用程序来定期更改桌面背景图像。

我的程序包含这段代码:

let screen = NSScreen.main()!
let newWallpaperURL = URL(/* ... */)
// ...
try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: screen, options: [:])

这有效,但仅适用于键盘关注的当前“空间”。

例如,如果我在一个全屏应用程序中,只有占满空间的全屏应用程序的背景会改变(而不是我的普通桌面的背景)。如果我有两个空间/桌面,它只会更改其中一个的背景图像。

是否可以以编程方式为每个空间单独设置壁纸?

4

2 回答 2

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(当前为 beta),但在 Xcode 8 中是类 func,这就是为什么您需要放置.screens()而不是.screens. 此外,screens返回一个可选项,因此您需要在将其传递给for循环之前安全地解开它。

于 2017-09-05T11:03:54.530 回答
0

您可以获取所有屏幕并设置所有屏幕。

let screens = NSScreen.screens
let newWallpaperURL = URL(/* ... */)
for i in screens {
    try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: i, options: [:])
}
于 2017-09-05T10:21:45.227 回答