objective-c - Objective C,圆角自定义窗口?

标签 objective-c xcode macos cocoa window

我有一个 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)

提前致谢。

最佳答案

您需要将“您的窗口不透明”设置为“否”。并子类化您的窗口 View 。

窗口子类:

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

窗口的 View 子类:

- (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 类并粘贴我在其中编写的“窗口 View 子类”代码。然后转到您的窗口 View 。

这是窗口 View ,单击它:

Window's view

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

enter image description here

关于objective-c - Objective C,圆角自定义窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9962983/

相关文章:

iOS 应用结构

ios - 如何停止加载数据

ios - Sprite Kit 粒子发射器形状

ios - 为什么我在 xcode 中点击更新时出现错误 "No value was provided for the parameter ' certificateIds'。

macos - 将 NSOpenPanel 的默认目录更改为 "Media"目录

iphone - 更改按钮框架时按钮操作不起作用

ios - 使用 Interface Builder 中的自动布局而不是代码使 UIView 填充包含 View

objective-c - 如何在Mac上分别录制音频和视频?

c++ - nm 符号值的偏移量?

iphone - 如何跟踪 gzip 编码的 Web 内容的下载进度?