如何使用drawlayer:inContext:使CALayer适应应用程序外观?

How to make CALayer adapt to the application appearance using drawlayer:inContext:?

提问人:jeanlain 提问时间:11/17/2023 更新时间:11/17/2023 访问量:12

问:

我有一个图层托管子类,它使用对象集作为其 .由于它不是图层支持的视图,因此它不会在 期间或期间重新绘制,而是在我调用其图层之后重新绘制。NSViewCALayerlayerdrawRect:updateLayerdrawLayer:inContext:setNeedsDisplay

问题在于该层必须适应应用程序外观(它使用系统对象),而 appkit 似乎无法管理这种情况。 苹果表示,需要在 或 期间设置图层的内容,否则颜色不会适应外观。 事实上,它们不会更新NSColordrawRect:updateLayerdrawLayer:inContext:

我使用的当前(丑陋的)解决方案是在方法中直接调用层(Apple 说我不应该这样做)(另一个视图,因为托管层的视图不会发送,因为它不是层支持的视图)。-displayupdateLayerupdateLayer

调用图层而不是不起作用,因为图层不会在调用中重新绘制其内容,而是在调用之后重新绘制。setNeedsDisplaydisplayupdateLayer

还有其他解决方案吗?

Objective-C Calayer NSView

评论


答: 暂无答案