我正在创建一个带圆角的NSView
子类。此视图是一个容器,其他子视图将添加到其中。我试图让NSView
的圆角也剪切掉所有子视图的角落,但是我无法得到它。
- (void)drawRect:(NSRect)dirtyRect {
NSRect rect = [self bounds];
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:self.radius yRadius:self.radius];
[path addClip];
[[NSColor redColor] set];
NSRectFill(dirtyRect);
[super drawRect:dirtyRect];
}
红色就是例如。如果我在矩形中添加子视图,则角落不会被剪裁:
我怎样才能做到这一点?
答案 0 :(得分:30)
使用核心动画图层将正确剪辑子图层。
在您的容器NSView子类中:
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.layer = _layer; // strangely necessary
self.wantsLayer = YES;
self.layer.masksToBounds = YES;
self.layer.cornerRadius = 10.0;
}
return self;
}
答案 1 :(得分:15)
答案 2 :(得分:0)
您是否尝试使用图层剪切?
<击> self.layer.cornerRadius = self.radius;
self.layer.masksToBounds = YES;
击>
啊,对不起,不知怎的,我错过了你在谈论NSView,而不是UIView。在所有情况下都很难剪辑NSView子视图,因为似乎大多数Cocoa标准视图都设置了自己的剪切路径。使用一些填充布局子视图可能更容易,并且避免需要裁剪。