gpt4 book ai didi

macos - 如何在不继承 NSButtonCell 的情况下创建自定义主题的 NSButton?

转载 作者:IT王子 更新时间:2023-10-29 05:11:29 27 4
gpt4 key购买 nike

我目前正在开发自定义主题的 NSButton。我发现的每个教程或指南都需要子类化 NSButtonCell,甚至是 the guide from Apple .

所有这些似乎都过时了,因为 NSControl 中的所有单元格方法都是 deprecated in Yosemite .我没有找到任何建议或指南可以使用什么作为替代品。

这是我能找到的唯一声明:

Gradual deprecation of NSCell

Mac OS X 10.10 takes another step towards the eventual deprecation of cells. Direct access to the cell of a control is discouraged, and methods which allow it will be formally deprecated in a subsequent release. A variety of cell-level APIs have been promoted to various Control subclasses in order to provide cell-free access to important functionality. NSLevelIndicator, NSTextField, NSSearchField, NSSlider, and NSPathControl all have new properties for this purpose. Cell-based NSTableViews are now deprecated, and view-based NSTableViews should be used instead. Matrix-based NSBrowsers are also deprecated in favor of the item-based interface.

Excerpt from: AppKit Release Notes for OS X v10.10

虽然在 NSButton 上没有任何文字。

NSTextField 支持图层支持 View ;因此,我在 NSButton 上尝试了相同的方法,但没有效果。

var btn = NSButton(NSMakeRect(0, 0, 50, 20))
btn.wantsLayer = true
btn.bordered = false
btn.layer?.backgroundColor = NSColor(calibratedWhite: 0.99, alpha: 1).CGColor
btn.layer?.borderWidth = 1
btn.layer?.borderColor = NSColor(calibratedWhite: 0.81, alpha: 1).CGColor

最佳答案

我肯定会花更多时间研究layer-backed view 方法。我不确定为什么它对您不起作用,因为层没有理由不在 NSButton(实际上是 NSView 衍生物)上工作。

您提到的动画也考虑了更多地研究图层。

从我正在处理的项目中提取的一些代码(自定义 NSButton):

从 init()...

    self.wantsLayer = true
self.layerContentsRedrawPolicy = NSViewLayerContentsRedrawPolicy.OnSetNeedsDisplay

self.layer?.borderColor = NSColor.gridColor().CGColor
self.layer?.borderWidth = 0.5
self.layer?.backgroundColor = NSColor.whiteColor().CGColor

然后您可以在特定于图层的显示周期中获得细粒度的控制:

override var wantsUpdateLayer:Bool{
return true
}

override func updateLayer() {
// your code here
super.updateLayer()
}

如果您的自定义按钮需要一个形状,那么您甚至可以使用下面的 CAShapeLayer 使您的背衬层成为一个特殊的形状……更多细节需要研究。

override func makeBackingLayer() -> CALayer {
return CAShapeLayer()
}

关于macos - 如何在不继承 NSButtonCell 的情况下创建自定义主题的 NSButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28700605/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com