我正在为自己制作一个小应用程序,以定期更改桌面背景图像。
我的程序包含这个代码块:
let screen = NSScreen.main()!
let newWallpaperURL = URL(/* ... */)
// ...
try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: screen, options: [:])
这起作用,但仅针对当前的"空间"键盘都集中在。
例如。如果我在一个全屏应用程序中,则只会更改所占用的全屏应用程序的背景(而不是我普通桌面的背景)。如果我有两个空格/桌面,它只会更改其中一个的背景图像。
是否可以通过编程为每个空间单独设置壁纸?
您可以获取所有屏幕并设置所有屏幕。
let screens = NSScreen.screens
let newWallpaperURL = URL(/* ... */)
for i in screens {
try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: i, options: [:])
}
在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(当前Beta)中的A 类VAR 8这就是为什么您需要放置.screens()
而不是.screens
的原因。另外,screens
返回可选的,因此您需要在将其传递到for
循环之前安全地将其拆开。