目标C,圆角定制窗口?

Den*_*nis 1 macos xcode cocoa window objective-c

我有一个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;
}
Run Code Online (Sandbox Code Playgroud)

我现在只需要打圆角.我尝试搜索类似的情况,并看到其中一些解释覆盖drawRect方法,但我无法让它们工作.我怎么能这样做?(我正在使用Mac OS X Lion)

提前致谢.

Jus*_*Boo 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;
}
Run Code Online (Sandbox Code Playgroud)

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];
}
Run Code Online (Sandbox Code Playgroud)

结果:

结果

更多解释如何执行此操作:

创建新的NSView类并粘贴我在其中编写的"Window的视图子类"代码.然后转到您的窗口视图.

这是窗口的视图点击它:

窗口的视图

转到Identity检查器并将类设置为您创建的类:

在此输入图像描述