幾個應用程序(包括內置的地址簿)使用半透明的HUD窗口,並帶有大量陰影文本。我想在我的Cocoa Mac應用程序中實現一個類似的窗口。如何實現HUD風格的窗口,如地址簿的「Show in Large Type」
有一個免費的實現這種窗口的地方嗎?
如果不是,實施它的最佳方法是什麼?
幾個應用程序(包括內置的地址簿)使用半透明的HUD窗口,並帶有大量陰影文本。我想在我的Cocoa Mac應用程序中實現一個類似的窗口。如何實現HUD風格的窗口,如地址簿的「Show in Large Type」
有一個免費的實現這種窗口的地方嗎?
如果不是,實施它的最佳方法是什麼?
下面是一個示例項目,顯示瞭如何做到這一點:
http://github.com/NSGod/BlackBorderlessWindow
基本上,你需要創建一個無國界的NSWindow
子類。最簡單的方法是將窗口大小和排列設置在nib文件中,然後將其類設置爲您的自定義子類。因此,儘管它在界面構建器中仍然看起來像一個普通窗口,但在運行時它將顯示爲您需要的。
@implementation MDBorderlessWindow
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)windowStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)deferCreation {
if (self = [super initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered defer:deferCreation]) {
[self setAlphaValue:0.75];
[self setOpaque:NO];
[self setExcludedFromWindowsMenu:NO];
}
return self;
}
alpha值將使窗口半透明。
此外,您還可以創建自定義NSView
子類,將繪製一個圓角矩形:
@implementation MDBlackTransparentView
- (id)initWithFrame:(NSRect)frame {
if (self = [super initWithFrame:frame]) {
}
return self;
}
- (void)drawRect:(NSRect)frame {
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:frame
xRadius:6.0 yRadius:6.0];
[[NSColor blackColor] set];
[path fill];
}
@end
像與窗口,您只需設置類窗口的內容查看的是您的自定義NSView
子類。 (使用大綱視圖模式並單擊顯示三角形以在nib文件的窗口圖標內顯示嵌套的NSView
)。同樣,儘管界面構建器中的視圖看起來很普通,但它在運行時看起來還不錯。
然後只需在視圖頂部放置NSTextField
並相應地設置文本。
請注意,一般來說,無邊框窗口不易處理(例如,如果您希望能夠拖動窗口,則需要自行添加該功能)。例如,Apple有一些關於如何允許拖動的示例代碼。
感謝您分享這個代碼。幫助了我很多! 您可以添加以下行...
[self setBackgroundColor:[NSColor clearColor]];
到窗口的初始化函數。這消除了白色的角落。
正是我在找的東西。有趣的是,即使演示應用程序使用完全相同的「1-800-MY-APPLE」示例文本。 – amrox 2010-12-16 00:56:44
@amrox:呃,我特意做了演示;-)(實際上,我已經有了一個無邊界窗口的示例項目,只需要一分鐘就可以調整它來做你想做的事情)。 – NSGod 2010-12-16 03:43:31
現在,如果有人將其轉換爲OSX服務,您可以將一些文本輸入到某個文件中,那就太好了。有一個像這樣的應用程序(LargeType 1.0),但它已經停止並且下載已被刪除(!?)。你爲它NSGod? – davemyron 2011-07-19 17:42:53