2012-04-01 64 views
1

我有一个NSWindow的子类来为我的应用程序定制我的一个窗口。 我有一切设置,但我不知道如何使角落圆。 目前,我的窗口是一个透明的矩形窗口,其中包含一些按钮,标签和一个文本框。目标C,圆角自定义窗口?

类包括:

#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)

在此先感谢。

回答

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; 
} 

窗口视图子类:

- (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]; 
} 

结果:

result

更多的解释如何做到这一点:

创建新的NSView类和粘贴,我在里面写了“窗口视图子类”的代码。然后转到您的窗口视图。

这里是它的窗口的观点点击:

Window's view

转到身份检查,并设置类的创建类:

enter image description here

+0

感谢您的回答。那么这两个人是不是在单独的课程?我把他们全部放在同一班。我对Objective-c非常陌生,所以如果你可以简单地向我解释如何添加Window的视图子类,那将更有帮助。此外,当我将setOpaque更改为NO时,我得到一个完全透明的窗口,尽管我只希望它是部分透明的(alpha值为0.75)。难道我做错了什么? – Dennis 2012-04-01 09:09:43

+0

@丹尼斯我添加了更多解释如何做到这一点。 – 2012-04-01 09:22:03

+0

是的,它终于工作了!非常感谢。除了现在窗户内的所有物体都有白色的角落。文本框,按钮和标签有额外的方形角。无论如何将它们删除?我是否还必须为每个对象创建一个子类? – Dennis 2012-04-01 19:27:50