2017-09-05 1 views
1

나는 바탕 화면 배경 이미지를 주기적으로 바꿀 수있는 작은 앱을 만들고 있습니다.macOS에서 각각의 "공간"/ 바탕 화면마다 (프로그래밍 방식으로) 바탕 화면을 설정할 수 있습니까?

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

이가 있지만 현재의 "공간"에 대한 키보드가에 초점을 맞추고 작품 :

내 프로그램은 코드 블록이 포함되어 있습니다.

전체 화면 앱을 사용하는 경우 전체 화면 공간 앱의 배경 만 변경됩니다 (내 정상적인 바탕 화면의 배경이 아님). 공간/데스크톱이 두 개인 경우, 둘 중 하나의 배경 이미지 만 변경됩니다.

프로그래밍 방식으로 각 공간에 대한 배경 화면을 개별적으로 설정할 수 있습니까?

답변

0

모든 화면을 가져 와서 모두 설정할 수 있습니다.

let screens = NSScreen.screens 
let newWallpaperURL = URL(/* ... */) 
for i in screens { 
    try! NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: i, options: [:]) 
} 
+0

가상 데스크톱의 배경 이미지 (스 와이프로 전환하는 배경 이미지)를 변경하고 싶습니다. 'NSScreen.screens()'는 각각의 실제 디스플레이에 대한 화면 만 반환합니다. – PKBeam

0

사용이 엑스 코드 8.x에서이 하나가 현재 엑스 코드 (8) NSScreen.screens에서 작동합니다 여기에 게시 다른 솔루션과는 달리

if let screens = NSScreen.screens() { 
    let newWallpaperURL = URL(/* ... */)) 
    for screen in screens { 
     try? NSWorkspace.shared().setDesktopImageURL(newWallpaperURL, for: screen, options: [:]) 
    } 
} 

현재 베타 엑스 코드 (9) (의 클래스 VAR입니다) 대신 .screens()을 입력해야하는 이유는 Xcode 8에서 클래스 func입니다. 또한 screens은 선택 사항을 반환하므로 루프를 for 루프로 전달하기 전에 안전하게 언 랩핑해야합니다.

+0

내가 분명히 밝혀야 할 것은 ... "공간"/ 바탕 화면으로 말하면, 당신은 3/4 손가락 수평 스 와이프로 탐색 할 수있는 가상 데스크톱을 의미합니다. NSScreen.screens()는 실제 디스플레이를위한 스크린만을 반환하므로 사용할 수 없습니다. – PKBeam

+0

[비슷한 게시물] (https://stackoverflow.com/questions/14586289/setting-the-desktop-background-on-all-spaces-in-cocoa) 도움이 될 것입니다. –

관련 문제