我有一个NSWindow的子类来定制我的应用程序的一个窗口。 我已经准备好了一切,但我不确定如何让角落变圆。 目前,我的窗口是一个透明的矩形窗口,其中包含一些按钮,标签和文本字段。
该课程包括:
#import "TransparentRoundRectWindow.h"
@implementation TransparentRoundRectWindow
-(id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag
{
self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
if (self) {
[self setAlphaValue:0.75];
[self setOpaque:YES];
[self setHasShadow:YES];
[self setBackgroundColor:[NSColor clearColor]];
}
return self;
}
-(BOOL)canBecomeKeyWindow
{
return YES;
}
我现在只需要转弯。我尝试搜索类似的情况,并看到其中一些解释覆盖drawRect方法,但我无法让它们工作。 我怎么能这样做? (我正在使用Mac OS X Lion)
提前致谢。
答案 0 :(得分:6)
你需要设置你的窗口不透明到NO。并继承你窗口的视图。
窗口子类:
-(id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag
{
self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
if (self) {
[self setOpaque:NO];
[self setHasShadow:YES];
[self setBackgroundColor:[NSColor clearColor]];
}
return self;
}
-(BOOL)canBecomeKeyWindow
{
return YES;
}
Window的视图子类:
- (void)drawRect:(NSRect)rect
{
NSBezierPath * path;
path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:8 yRadius:8];
[[NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:0.75] set];
[path fill];
}
<强>结果:强>
更多解释如何执行此操作:
创建新的NSView类并粘贴我在其中编写的“Window的视图子类”代码。然后转到你窗口的视图。
这是窗口的视图点击它:
转到Identity检查器并将类设置为您创建的类: