更新时间:2023-11-17 16:53:10
看看我的RadialGradientLayer实现,并随意修改它
Have a look at my implementation of RadialGradientLayer, and feel free to modify it
class RadialGradientLayer: CALayer {
override init(){
super.init()
needsDisplayOnBoundsChange = true
}
init(center:CGPoint,radius:CGFloat,colors:[CGColor]){
self.center = center
self.radius = radius
self.colors = colors
super.init()
}
required init(coder aDecoder: NSCoder) {
super.init()
}
var center:CGPoint = CGPointMake(50,50)
var radius:CGFloat = 20
var colors:[CGColor] = [UIColor(red: 251/255, green: 237/255, blue: 33/255, alpha: 1.0).CGColor , UIColor(red: 251/255, green: 179/255, blue: 108/255, alpha: 1.0).CGColor]
override func drawInContext(ctx: CGContext!) {
CGContextSaveGState(ctx)
var colorSpace = CGColorSpaceCreateDeviceRGB()
var locations:[CGFloat] = [0.0, 1.0]
var gradient = CGGradientCreateWithColors(colorSpace, colors, [0.0,1.0])
var startPoint = CGPointMake(0, self.bounds.height)
var endPoint = CGPointMake(self.bounds.width, self.bounds.height)
CGContextDrawRadialGradient(ctx, gradient, center, 0.0, center, radius, 0)
}
}
在我的情况下,我只需要两种颜色,如果你需要更多颜色,你需要修改 location
在 drawInContext
中声明的数组。在从这个类创建对象后,不要忘记调用它的 setNeedsDisplay()
否则它不会工作。有时我需要不同的尺寸渐变,这就是为什么你必须在初始化器中传递radius参数和渐变的中心点
In my case I needed it with two colors only and if you need more colors you need to modify location
array declared in drawInContext
. Also after creating object from this class don't forget to call its setNeedsDisplay()
otherwise it wont work. Also sometimes I needed different size gradients so thats why you have to pass radius parameter in initializer and the center point of your gradient