我试图在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延伸:
class func imageWithLayer(layer: CALayer) -> UIImage {
UIGraphicsBeginImageContextWithOptions(layer.bounds.size, layer.isOpaque, 0.0)
layer.render(in: UIGraphicsGetCurrentContext()!)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return img!
}
出于某种原因,当我运行应用程序时,我没有获得渐变,我甚至不会得到任何颜色,它只是清晰的颜色(alpha)而不是渐变。
知道出了什么问题吗?
谢谢!
答案 0 :(得分:0)
CAGradientLayer
使用CGColors
数组作为输入。要解决您的问题,请考虑使用CGColor更改此:
gradientLayer.colors = [UIColor.blue, UIColor.red]
对此
gradientLayer.colors = [UIColor.blue.cgColor, UIColor.red.cgColor]
修改
您可以在UISlider
左边缘(最小轨迹图像)上获得方形边缘!所以为了解决这个问题,只需改变你的扩展功能:
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!
}