要拿到桌面背景的圖像,使用方法:
NSURL *imageURL = [[NSWorkspace sharedWorkspace] desktopImageuRLForScreen:[NSScreen mainScreen]
NSImage *theDekstopImage = [[NSImage alloc] initWithContentsOfURL:imageURL];
可以使用CIFilter圖像模糊。 Here's a Apple doc describing how to apply filters.
然後,您可以將該圖像加載到一個顏色中,並將其設置爲該窗口的背景顏色。此外,設置窗口有沒有風格掩模(沒有關閉按鈕,標題幀等),覆蓋屏幕,並且在所有內容的前面以外的船塢:
[yourWindow setBackgroundColor:[NSColor colorWithPatternImage:theDesktopImage]];
[yourWindow setStyleMask:NSBorderlessWindowMask];
[yourWindow setLevel:kCGDockWindowLevel - 1];
[yourWindow setFrame:[[NSScreen mainScreen] frame] display:YES];
要具有在窗口褪色,你可以使用NSWindow的動畫代理。 (替換1.0 0.0,使其淡出。)
[[yourWindow animator] setAlphaValue:1.0];
當然,你可以自定義多一點的東西像CoreAnimation,但是這應該只是罰款。
爲了處理背景點擊,我建議製作一個NSView的子類,你的-orderOut:
你的窗口在-mouseDown:
上。然後放置一個跨越整個窗口框架的子類的實例。
此外,NSViews有時不關鍵事件作出響應,這樣你就可以添加事件偵聽器來檢測ESC鍵被按下,而你的應用處於活動狀態的任何時間:
[NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:(NSEvent *ev)^ {
if([ev keyCode] == 0x53) {
[yourWindow orderOut:self];
}
return ev;
}
代碼看起來真棒。我無法用言語表達,非常感謝。到目前爲止,我用窗口作爲背景圖像,但是對於這一行:「[window setFrame:[[NSScreen mainScreen] frame]];」,Xcode警告:「NSWindow可能不會響應'setFrame:'。我應該忽略它嗎,還是我錯過了一些重要的東西?對不起,如果這是愚蠢的問題... – provdr
忘了提及,我的項目的基礎SDK是10.7,部署目標也是10.7。 – provdr
-setFrame:應該是-setFrame:display :,謝謝指出 – Isabel