NSView不可见,除非我覆盖drawRect,然后即使在superview的图层上setMasksToBounds为NO,它也会被剪裁

时间:2013-05-22 14:25:46

标签: macos cocoa calayer nsview appkit

尝试将NSView添加到现有的NSView中,但由于某些奇怪的原因我失败了。我这样做:

        _resizeView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 10, 10)];
    [_resizeView.layer setBorderWidth:2];
    [_resizeView.layer setBorderColor:[NSColor purpleColor].CGColor];
    [_resizeView.layer setBackgroundColor:[NSColor blackColor].CGColor];
    [_resizeView setAutoresizingMask:NSViewNotSizable | NSViewMinXMargin | NSViewMaxYMargin];
    [self addSubview:_resizeView];

尝试删除自动调整遮罩但仍然无效。然后我将它从NSView改为NSButton,这神奇地起作用,视图可见。

创建了我自己的NSView子类,我正在覆盖drawRect,然后它突然变得可见,但仅限于我在那里绘制的路径(是的,我称之为超级drawRect)。这是怎么回事?

所以我想,因为我基本上只是做一个带边框的框(背景颜色只是用于测试)我可以继续使用我的子类,但后来我尝试将它添加到现有视图的角落,略微伸出,即使我将setMasksToBounds设置为NO,我将其添加到视图的主要图层中,它也会被屏蔽。

我在这里生气!为什么没有一个按预期工作?

2 个答案:

答案 0 :(得分:3)

如果您使用图层支持的视图,则必须调用

[_resizeView setWantsLayer:YES];

也许

[_resizeView setNeedsDisplay:YES];

但我不这么认为,因为它只是一个NSView

答案 1 :(得分:1)

[_resizeView setNeedsDisplay:YES];  
  

每当用于绘制视图对象的数据或状态发生变化时,   视图应该发送一个setNeedsDisplay:message。