首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >层支持的NSControl仍然调用NSCell绘图例程。

层支持的NSControl仍然调用NSCell绘图例程。
EN

Stack Overflow用户
提问于 2018-06-11 17:53:38
回答 1查看 257关注 0票数 0

上下文:

苹果在macOS上有“软-反对”的macOS。我试图在我的自定义NSControl子类中减少它的使用,而是使用CALayers来处理我的绘图。为此,我让我的NSButton子类层支持:

代码语言:javascript
复制
self.wantsLayer = YES;

然后,我尝试使用"updateLayer“路径而不是”drawRect“来处理我的绘图:

代码语言:javascript
复制
- (BOOL) wantsUpdateLayer {
    return YES;
}

- (void) updateLayer { 
     // Change layer background/border colors if pressed, disabled, etc.
     // Change text color of a CATextLayer sublayer for button's title. 
}

问题是:

如果我使用-updateLayer,NSCell仍然会接收绘图命令并绘制其标题,从而在我的控件中产生一个“模糊”的标题字符串,因为该字符串正在绘制两次--一次在我的textLayer中,一次由单元格绘制。

但是,如果我在-drawRect:而不是-updateLayer中做的工作与上面完全相同,那么单元格就不会执行任何绘图(因为我没有用[self.cell drawInteriorWithFrame:ControlView:]调用它)

对于我的生活来说,当关联的controlView (我的按钮子类)选择-updateLayer而不是-drawRect:时,我无法弄清楚是什么触发了单元格绘图。

我看过关于NSControl.h和NSView.h的所有方法。我已经重写了所有的-updateCell和相关方法。这些都不是罪魁祸首。我不能简单地设置self.cell=nil,因为NSControl仍然依赖于NSCell来处理事件,等等。

当NSCell的相关controlView使用-updateLayer而不是-drawRect:时,有人能告诉我如何阻止它绘图吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-16 13:46:56

-[NSButtonCell layoutLayerWithFrame:inView:]中,单元格添加一个NSTextField来绘制标题。重写titleRectForBounds:并返回NSZeroRect以删除标题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50803492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档