macos - NSView 不可见,除非我重写drawRect,然后即使 setMasksToBounds 在 superview 层上为 NO,它也会被剪切

标签 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,这神奇地起作用并且 View 是可见的。

创建了我自己的 NSView 子类,我在其中重写了drawRect,然后它突然变得可见,但仅限于我自己在那里绘制的路径(是的,我正在调用 super drawRect)。这是怎么回事?

所以我想,既然我基本上只是做一个带有边框的盒子(背景颜色只是为了测试),我可以继续使用我的子类,但后来我尝试将其添加到我现有 View 的角落,稍微突出,即使我将要添加到的 View 的主要层的 setMasksToBounds 设置为 NO,它也会被遮盖。

我要疯了!为什么这一切都没有按预期工作?

最佳答案

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

[_resizeView setWantsLayer:YES];

也许

[_resizeView setNeedsDisplay:YES];

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

关于macos - NSView 不可见,除非我重写drawRect,然后即使 setMasksToBounds 在 superview 层上为 NO,它也会被剪切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16694384/

相关文章:

objective-c - Mac 中的 CF 前缀

macos - 执行任何终端命令时获取 `No such file or directory`(由 VMware Fusion 引起)

cocoa - 读取桌面plist

ios - 如何将圆形蒙版应用到 UIImageView

java - 如何在 Mac 上使用较新的 JRE 或 JDK 运行 Android Studio?

ios - 通过 OS X 的 Apple 通知中心服务

objective-c - NSTimer 间隔小于触发代码中的 sleep 命令

objective-c - 使用两个 NSTimer

iphone - 将 CALayer 用于 UITableViewCell

ios - 无法再次翻转图层、CALayer、CATransform3D 旋转。