說到iOS
實現一個控件的漸變色,我們就需要了解CAGradientLayer
這個類竭缝。
CAGradientLayer簡介
CAGradientLayer
是用來生成兩種或更多顏色平滑漸變的兔辅。用Core Graphics
復制一個CAGradientLaye
r并將內容繪制到一個普通圖層的寄宿圖也是有可能的夺刑,但是CAGradientLayer
的真正好處在于繪制使用了硬件加速谢翎。
屬性說明
漸變色彩數組盾舌,這個數組成員接受CGColorRef
類型的值(并不是從NSObject
派生而來)擅笔,所以我們要用通過bridge
轉換以確保編譯正常志衣。
@property(nullable, copy) NSArray *colors;
漸變顏色位置,一個浮點數值的數組(以NSNumber
包裝)猛们,數組大小和colors
數組大小一定要相同念脯,否則你將會得到一個空白的漸變,多重漸變需要使用弯淘。
@property(nullable, copy) NSArray<NSNumber *> *locations;
決定了漸變的方向绿店,這兩個參數是以單位坐標系進行的定義,所以左上角坐標是{0, 0}庐橙,右下角坐標是{1, 1}假勿。
@property CGPoint startPoint;
@property CGPoint endPoint;
將繪制的漸變類型。 目前唯一允許值為“軸”(默認值)可以忽略态鳖。
@property(copy) NSString *type;
基礎漸變
簡單的兩種顏色的對角線漸變
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.containerView = [[UIView alloc] init];
[self.view addSubview:self.containerView];
[self.containerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.view);
make.centerY.equalTo(self.view).offset(-100);
make.size.mas_equalTo(CGSizeMake(100, 100));
}];
[self.containerView layoutIfNeeded]; // 重點
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = self.containerView.bounds;
[self.containerView.layer addSublayer:gradientLayer];
gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor, (__bridge id)[UIColor blueColor].CGColor];
gradientLayer.startPoint = CGPointMake(0, 0);
gradientLayer.endPoint = CGPointMake(1, 1);
}
基礎漸變
多重漸變
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.containerView = [[UIView alloc] init];
[self.view addSubview:self.containerView];
[self.containerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.view);
make.centerY.equalTo(self.view).offset(-100);
make.size.mas_equalTo(CGSizeMake(100, 100));
}];
[self.containerView layoutIfNeeded]; // 重點
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = self.containerView.bounds;
[self.containerView.layer addSublayer:gradientLayer];
gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor, (__bridge id) [UIColor yellowColor].CGColor, (__bridge id)[UIColor greenColor].CGColor];
gradientLayer.locations = @[@0.0, @0.25, @0.5];
gradientLayer.startPoint = CGPointMake(0, 0);
gradientLayer.endPoint = CGPointMake(1, 1);
}
多重漸變