[英]Adding gradient to UISlider doesn't work
I'm trying to add a gradient to the left side of a UISlider
like this: 我试图像这样在
UISlider
的左侧添加一个渐变:
let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.frame
gradientLayer.frame.size.height = self.trackHeight
gradientLayer.frame.origin = CGPoint.zero
gradientLayer.colors = [UIColor.blue, UIColor.red]
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5)
let trackImage = UIImage.imageWithLayer(layer: gradientLayer)
self.setMinimumTrackImage(trackImage, for: .normal)
UIImage extention: UIImage扩展:
class func imageWithLayer(layer: CALayer) -> UIImage {
UIGraphicsBeginImageContextWithOptions(layer.bounds.size, layer.isOpaque, 0.0)
layer.render(in: UIGraphicsGetCurrentContext()!)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return img!
}
For some reason, when I run the app I don't get a gradient, and I don't even get any color, it's just clear color (alpha) instead of the gradient. 由于某种原因,当我运行该应用程序时,我没有得到渐变,甚至没有得到任何颜色,它只是纯色(alpha)而不是渐变。
Any idea what went wrong? 知道出了什么问题吗?
Thank you! 谢谢!
CAGradientLayer
uses CGColors
array as input. CAGradientLayer
使用CGColors
数组作为输入。 To solve your problem, consider using CGColor by changing this: gradientLayer.colors = [UIColor.blue, UIColor.red]
to this gradientLayer.colors = [UIColor.blue.cgColor, UIColor.red.cgColor]
要解决您的问题,请考虑使用CGColor,方法是将以下内容更改为:
gradientLayer.colors = [UIColor.blue, UIColor.red]
更改为gradientLayer.colors = [UIColor.blue.cgColor, UIColor.red.cgColor]
EDIT You may get a square edges on the UISlider
left edge (min track image)! 编辑您可能会在
UISlider
左边缘上得到一个正方形的边缘(最小轨迹图像)! so in order to fix that, just alter your extension function this way: 因此,为了解决该问题,只需按以下方式更改扩展功能:
class func imageWithLayer(layer: CALayer, cornerRadius: CGFloat) -> UIImage {
layer.cornerRadius = cornerRadius
UIGraphicsBeginImageContextWithOptions(layer.bounds.size, false, 0)
layer.render(in: UIGraphicsGetCurrentContext()!)
let img = UIGraphicsGetImageFromCurrentImageContext()?.resizableImage(withCapInsets: UIEdgeInsets.zero)
UIGraphicsEndImageContext()
return img!
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.