gpt4 book ai didi

ios - 具有渐变背景的 UISlider 在没有 Storyboard 的情况下使用时不起作用

转载 作者:行者123 更新时间:2023-11-30 11:17:45 26 4
gpt4 key购买 nike

当我尝试以编程方式创建具有渐变背景的 UISlider 时,它无法正常工作(渐变重复多次)。当我将下面的代码与 Storyboard一起使用时,一切正常。我在这里错过了什么吗?谢谢!

UISlider 子类

class GradientSlider: UISlider {

var thickness: CGFloat = 20 {
didSet {
setup()
}
}

var sliderThumbImage: UIImage? {
didSet {
setup()
}
}

func setup() {
let minTrackStartColor = UIColor.red
let minTrackEndColor = UIColor.yellow
let maxTrackColor = UIColor.green
do {
self.setMinimumTrackImage(try self.gradientImage(
size: self.trackRect(forBounds: self.bounds).size,
colorSet: [minTrackStartColor.cgColor, minTrackEndColor.cgColor]),
for: .normal)
self.setMaximumTrackImage(try self.gradientImage(
size: self.trackRect(forBounds: self.bounds).size,
colorSet: [maxTrackColor.cgColor, maxTrackColor.cgColor]),
for: .normal)
self.setThumbImage(sliderThumbImage, for: .normal)
} catch {
self.minimumTrackTintColor = minTrackStartColor
self.maximumTrackTintColor = maxTrackColor
}

print("SZ \(self.bounds.size)")
}

func gradientImage(size: CGSize, colorSet: [CGColor]) throws -> UIImage? {
let tgl = CAGradientLayer()
tgl.frame = CGRect.init(x:0, y:0, width:size.width, height: size.height)
tgl.cornerRadius = tgl.frame.height / 2
tgl.masksToBounds = false
tgl.colors = colorSet
tgl.startPoint = CGPoint.init(x:0.0, y:0.5)
tgl.endPoint = CGPoint.init(x:1.0, y:0.5)

UIGraphicsBeginImageContextWithOptions(size, tgl.isOpaque, 0.0);
guard let context = UIGraphicsGetCurrentContext() else { return nil }
tgl.render(in: context)
let image =

UIGraphicsGetImageFromCurrentImageContext()?.resizableImage(withCapInsets:
UIEdgeInsets.init(top: 0, left: size.height, bottom: 0, right: size.height))
UIGraphicsEndImageContext()
return image!
}

override func trackRect(forBounds bounds: CGRect) -> CGRect {
return CGRect(
x: bounds.origin.x,
y: bounds.origin.y,
width: bounds.width,
height: thickness
)
}

override init(frame: CGRect) {
super.init(frame: frame)
setup()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
}

以编程方式添加 slider

func addSlider() {
var slider = GradientSlider()
slider.frame = CGRect(x: 30, y: 600, width: view.frame.width - 30, height: 20)
slider.isContinuous = true
slider.value = 0.5
slider.addTarget(self, action: #selector(slide(sender:)), for: .valueChanged)
view.addSubview(slider)
}

original answer

最佳答案

我替换了 addSlider 代码,它对我有用。

func addSlider() {
let slider = GradientSlider.init(frame: CGRect(x: 30, y: 100, width: view.frame.width - 30, height: 20))
slider.isContinuous = true
slider.value = 0.5
slider.addTarget(self, action: #selector(slide(sender:)), for: .valueChanged)

view.addSubview(slider)
}

关于ios - 具有渐变背景的 UISlider 在没有 Storyboard 的情况下使用时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51591831/

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