2

我有一个 NSslider,我正在尝试使用代码对其进行缩放:

let circle = NSSlider(frame: NSRect(x: 0.0, y: 333.0, width: 50.0, height: 50.0))
circle.layer?.setAffineTransform(CGAffineTransform(scaleX: 20.0, y: 20.0))
circle.wantsLayer = true
circle.sliderType = .circular

但这条线不起作用:

circle.layer?.setAffineTransform(CGAffineTransform(scaleX: 20.0, y: 20.0))

MacOS 中还有其他用于缩放的命令吗?我已经尝试像在 iOS 中那样做,但它不起作用我正试图让它大 2 倍

4

2 回答 2

1

如果不显着破解 NSSlider 类,这是不可能的。

NSSlider 实现以非键值可观察的方式不断将层的“仿射变换”重置为其原始单位矩阵 (scale=1)。滑块会暂时改变大小,然后恢复到原来的大小。

(您的代码中还有一个错误,因为您需要在访问图层之前设置 WantLayer=true。但这还不够。)

这个问题有一个公认的答案,解释了如何缩放任意 NSView。它适用于标签,但不适用于 NSSlider。

您可以做什么:您可以创建自己的滑块类,该类复制 NSSlider 的行为并具有 scale 属性。或者:您可以对 NSSlider 进行逆向工程,以找出它阻止扩展它的尝试的原因。或者:也许您对调整knobThickness滑块感到满意?

于 2018-08-06T17:31:38.340 回答
-1

该代码CGAffineTransform(scaleX: 20.0, y: 20.0)将使滑块20倍!你应该用CGAffineTransform(scaleX: 2.0, y: 2.0)它来使它大 2 倍

于 2018-08-06T10:11:52.703 回答