NSView - setCornerRadius曲线全部4个角

时间:2017-05-19 10:04:40

标签: objective-c cocoa nsview drawrect cornerradius

我正在使用Mac应用程序,需要一个带有4个圆角的自定义NSView。我尝试过的所有东西都没有产生任何结果,或只是弯曲了NSView的两个边缘。有没有办法弯曲NSView的所有4个角落?

我尝试制作一个自定义类并使用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 ....)。

谢谢你的时间,Dan。

1 个答案:

答案 0 :(得分:3)

这三行为我提供圆角和红色背景,testView类型NSView链接为ViewController viewDidLoad中故事板的出口,不需要子类:

_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];

了解framebounds之间的区别。 上述代码也适用于drawRect: