CAGradientLayer色彩坡形器

來源:互聯網
上載者:User

標籤:property   self   import   make   nullable   blog   技術   ash   har   

使用CAGradientLayer可以實現顏色的漸層, 我們先看下標頭檔

@interface CAGradientLayer : CALayer@property(nullable, copy) NSArray *colors;
//色彩坡形的數組@property(nullable, copy) NSArray
<NSNumber *> *locations;
//漸層顏色的區間分布,locations的數組長度和color一致,預設是nil,會平均分布@property CGPoint startPoint;
//映射locations中第一個位置,用單位向量表示,比如(0,0)表示從左上方開始變化。預設值是(0.5,0.0)
@property CGPoint endPoint;//映射locations中最後一個位置,用單位向量表示,比如(1,1)表示到右下角變化結束。預設值是(0.5,1.0)
@property(copy) NSString
*type;//預設值是kCAGradientLayerAxial,表示按像素均勻變化。除了預設值也無其它選項
@end

下面是我用上面的代碼實現的最終效果,startPoint是(0,0),endPoint是(1,1)。

 

下面我們試試用這個來實現一個漸層色的圓環, 

需要說明的是CAGradientLayer只能實現矩形範圍內的色彩坡形, 那漸層的圓環要如何?呢? mask 對了

 

首先我們建立兩個挨著的矩形漸層色塊, 並把兩個色塊添加到同一個layer

 

再建立一個帶有圓弧形狀的layer作為mask

上代碼:

#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        //建立圓弧路徑    UIBezierPath * path      = [UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 50) radius:45 startAngle:- 7.0 / 6 * M_PI endAngle:M_PI / 6 clockwise:YES];        //添加圓弧Layer    [self.view.layer addSublayer:[self createShapeLayerWithPath:path]];        //配置左色塊CAGradientLayer    CAGradientLayer * leftL  = [self createGradientLayerWithColors:@[(id)[UIColor redColor].CGColor,(id)[UIColor yellowColor].CGColor]];    leftL.position           = CGPointMake(25, 40);        //配置右色塊CAGradientLayer    CAGradientLayer * rightL = [self createGradientLayerWithColors:@[(id)[UIColor greenColor].CGColor,(id)[UIColor yellowColor].CGColor]];    rightL.position          = CGPointMake(75, 40);        //將兩個色塊拼接到同一個layer並添加到self.view    CALayer * layer          = [CALayer layer];    layer.bounds             = CGRectMake(0, 0, 100, 80);    layer.position           = self.view.center;    [layer addSublayer:leftL];    [layer addSublayer:rightL];    [self.view.layer addSublayer:layer];        //建立一個ShapeLayer作為mask    CAShapeLayer * mask = [self createShapeLayerWithPath:path];    mask.position       = CGPointMake(50, 40);    layer.mask          = mask;    //mask.strokeEnd = 1;}//依照路徑建立並返回一個CAShapeLayer-(CAShapeLayer *)createShapeLayerWithPath:(UIBezierPath *)path {        CAShapeLayer * layer = [CAShapeLayer layer];    layer.path           = path.CGPath;    layer.bounds         = CGRectMake(0, 0, 100, 75);    layer.position       = self.view.center;    layer.fillColor      = [UIColor clearColor].CGColor;    layer.strokeColor    = [UIColor colorWithRed:33 / 255.0 green:192 / 255.0 blue:250 / 255.0 alpha:1].CGColor;    layer.lineCap        = @"round";    layer.lineWidth      = 10;        return layer;}//依照給定的顏色數組建立並返回一個CAGradientLayer-(CAGradientLayer *)createGradientLayerWithColors:(NSArray *)colors {        CAGradientLayer * gradientLayer = [CAGradientLayer layer];    gradientLayer.colors            = colors;    gradientLayer.locations         = @[@0,@0.8];    gradientLayer.startPoint        = CGPointMake(0, 1);    gradientLayer.endPoint          = CGPointMake(0, 0);    gradientLayer.bounds            = CGRectMake(0, 0, 50, 80);        return gradientLayer;}@end

可以改變mask的strokeEnd來實現動畫

 

 

 

 

 

 

CAGradientLayer色彩坡形器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.