繁体   English   中英

缩放不适用于MacOS中的NSSlider

[英]Scaling does not work for NSSlider in MacOS

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

如果不对NSSlider类进行大量修改,这是不可能的。

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

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

这个问题有一个可接受的答案,该答案解释了如何缩放任意NSViews。 它适用于标签,但不适用于NSSliders。

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

代码CGAffineTransform(scaleX: 20.0, y: 20.0)将使滑块大二十次! 您应该使用CGAffineTransform(scaleX: 2.0, y: 2.0)将其设为2x biggger

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM