缩放不适用于MacOS中的NSSlider

时间:2018-08-06 10:04:25

标签: swift macos nsslider

我有一个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倍

2 个答案:

答案 0 :(得分:1)

要不对NSSlider类进行大量修改就不可能。

NSSlider实现始终以不可键值可观察的方式将层的“ affineTransform”重置为其原始身份矩阵(scale = 1)。滑块会暂时更改大小,但随后会恢复为原始大小。

(代码中还存在一个错误,因为在访问该层之前需要设置wantLayer = true。但这还不够。)

This question有一个公认的答案,该答案解释了如何缩放任意NSViews。它适用于标签,但不适用于NSSliders。

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

答案 1 :(得分:-1)

代码CGAffineTransform(scaleX: 20.0, y: 20.0)将使滑块 TWENTY 倍大!您应该使用CGAffineTransform(scaleX: 2.0, y: 2.0)将其设为2倍大