Объектив C, закругленный угол нестандартного окна? - PullRequest
1 голос
/ 01 апреля 2012

У меня есть подкласс 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)

Спасибо заранее.

1 Ответ

6 голосов
/ 01 апреля 2012

Вам необходимо установить для вашего окна непрозрачный на 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...