Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 是否可以(以编程方式)为每个单独的“壁纸”设置壁纸;“空间”/macOS中的桌面?_Swift_Macos_Cocoa_Nsworkspace_Macos High Sierra - Fatal编程技术网

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年了。你找到解决办法了吗?已经三年了。你找到解决办法了吗?