Swift 是否可以(以编程方式)为每个单独的“壁纸”设置壁纸;“空间”/macOS中的桌面?
我正在为自己制作一个小应用程序,定期更改桌面背景图像 我的程序包含以下代码块:Swift 是否可以(以编程方式)为每个单独的“壁纸”设置壁纸;“空间”/macOS中的桌面?,swift,macos,cocoa,nsworkspace,macos-high-sierra,Swift,Macos,Cocoa,Nsworkspace,Macos High Sierra,我正在为自己制作一个小应用程序,定期更改桌面背景图像 我的程序包含以下代码块: let screen = NSScreen.main()! let newWallpaperURL = URL(/* ... */) // ... try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: screen, options: [:]) 这是可行的,但只适用于键盘关注的当前“空间” e、 g.如果我使用的是全屏应用程序,则只会更
let screen = NSScreen.main()!
let newWallpaperURL = URL(/* ... */)
// ...
try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: screen, options: [:])
这是可行的,但只适用于键盘关注的当前“空间”
e、 g.如果我使用的是全屏应用程序,则只会更改占用空间的全屏应用程序的背景(而不是我正常桌面的背景)。
如果我有两个空间/桌面,它只会更改其中一个的背景图像
是否可以通过编程方式为每个空间单独设置壁纸?您可以获取所有屏幕并设置所有屏幕
let screens = NSScreen.screens
let newWallpaperURL = URL(/* ... */)
for i in screens {
try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: i, 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)中的一个类变量,但在Xcode 8中是一个类func,这就是为什么您需要放置.screens()
而不是.screens
。另外,屏幕
返回一个可选文件,因此在将其传递到for
循环之前,您需要安全地将其展开 在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)中的一个类变量,但在Xcode 8中是一个类func,这就是为什么您需要放置.screens()
而不是.screens
。另外,屏幕
返回一个可选文件,因此在将其传递到for
循环之前,您需要安全地将其展开 我或许应该澄清一下。。。所谓“空间”/“桌面”,我指的是可以通过三次四指水平滑动导航的虚拟桌面NSScreen.screens()
仅返回物理显示的屏幕,因此我无法使用它。可能会对您有所帮助。我可能应该澄清一下。。。所谓“空间”/“桌面”,我指的是可以通过三次四指水平滑动导航的虚拟桌面NSScreen.screens()
仅返回物理显示的屏幕,因此我无法使用它。可能会对您有所帮助。我想更改虚拟桌面的背景图像(通过滑动切换的桌面)NSScreen.screens()NSScreen.screens()
只返回每个物理显示的屏幕。已经3年了。你找到解决办法了吗?已经三年了。你找到解决办法了吗?