CAGradientLayer是CALayer的一個子類,用來生成漸變色的Layer。
CAGradientLayer有5個屬性:
@property(nullable, copy) NSArray *colors; // CGColorRef數組,用來定義漸變節(jié)點顏色
@property(nullable, copy) NSArray<NSNumber *> *locations; // 存儲每個漸變節(jié)點位置
@property CGPoint startPoint; // 漸變色的起始點
@property CGPoint endPoint; // 漸變色的結束點,和起始點共同能夠成漸變方向
@property(copy) NSString *type; // 沒什么意義,只能設置為axial
CAGradientLayer具體使用方法如下:
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.startPoint = CGPointMake(0, 0);
gradient.endPoint = CGPointMake(1, 1);
gradient.locations = @[@0.3, @0.5, @0.6];
gradient.colors = [NSArray arrayWithObjects:
(id)[UIColor redColor].CGColor,
(id)[UIColor greenColor].CGColor,
(id)[UIColor blueColor].CGColor,
nil];
最后把gradientadd到view.layer上就可以了,最終效果是這樣的:

漸變色
但是這種方式用在UIButton上的時候就有點美中不足了,因為我們都希望一個Button在點擊的時候會有高亮的效果,但在Button的Layer上又添加了一層gradient,就會導致點擊的時候顏色無法改變,因此我們需要將CAGradientLayer轉為UIImage,并通過
setBackgroundImage:(nullable UIImage *)image forState:(UIControlState)state方法設置上去就可以解決了。
通過CALayer創(chuàng)建UIImage:
- (UIImage *)imageFromLayer:(CALayer *)layer {
UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, 0);
[layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outputImage;
}
設置完之后按中時的效果:

高亮