NSView - setCornerRadius изгибает все 4 угла

Я работаю над приложением для Mac и мне нужен собственный NSView с 4 закругленными углами. Все, что я пробовал, либо не дает результатов, либо только изгибает два края NSView. Есть ли способ изогнуть все 4 угла NSView?

Я попытался создать собственный класс и использовал метод initWithFrame, который не дает никаких результатов. Затем я попробовал метод drawRect, который изгибает только два угла нижней части:

-(void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];

    [self setWantsLayer:YES];
    [self.layer setFrame:self.frame];
    [self.layer setMasksToBounds:YES];
    [self.layer setCornerRadius:10.0f];
}

Как согнуть все четыре угла? И кто-нибудь знает, почему разработка для Mac намного сложнее, чем для iOS. Почему даже для самой простой задачи всегда требуется пользовательский класс (например, установка цвета фона NSView или запуск эквивалента UIViewAnimation....).

Спасибо за ваше время, Дэн.


person Supertecnoboff    schedule 19.05.2017    source источник


Ответы (1)


Эти три строки дают мне закругленные углы и красный фон для testView типа NSView, связанного как выход из раскадровки в viewDidLoad ViewController, подклассы не нужны:

_testView.wantsLayer = YES;
_testView.layer.backgroundColor = [NSColor redColor].CGColor;
_testView.layer.cornerRadius = 10.;

Изменить

Не все углы были закруглены из-за этой строки:

[self.layer setFrame:self.frame];

В основном вам это не нужно, вы устанавливаете правильную рамку слоя с помощью этой строки:

[self setWantsLayer:YES];

Если вы хотите явно установить рамку слоя, вы хотите использовать

[self.layer setFrame:self.bounds];

Читайте о разнице между frame и bounds. И вышеупомянутый код работает и в drawRect:.

person schmidt9    schedule 19.05.2017
comment
Ясно спасибо. Это сработало для меня, не уверен, почему подклассы не сработали. Ок, все равно спасибо. - person Supertecnoboff; 19.05.2017