使用CAGradientLayer+UIBezierPath實現(xiàn)圓形漸變 1.自定義GredientLayerView

//

//? GredientLayerView.m

//? GredientLayerView

//

//? Created by City--Online on 15/10/26.

//? Copyright ? 2015年 City--Online. All rights reserved.

//

#import "GredientLayerView.h"

#define degreesToRadians(x) (M_PI*(x)/180.0) //把角度轉換成PI的方式

static const float kPROGRESS_LINE_WIDTH=4.0;

@interface GredientLayerView ()

@property (nonatomic,strong) CAShapeLayer *progressLayer;

@end

@implementation GredientLayerView

- (instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

//設置貝塞爾曲線

UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2) radius:(frame.size.width-kPROGRESS_LINE_WIDTH)/2 startAngle:degreesToRadians(-210) endAngle:degreesToRadians(30) clockwise:YES];

//遮罩層

_progressLayer = [CAShapeLayer layer];

_progressLayer.frame = self.bounds;

_progressLayer.fillColor =? [[UIColor clearColor] CGColor];

_progressLayer.strokeColor=[UIColor redColor].CGColor;

_progressLayer.lineCap = kCALineCapRound;

_progressLayer.lineWidth = kPROGRESS_LINE_WIDTH;

//漸變圖層

CAGradientLayer *gradientLayer =? [CAGradientLayer layer];

gradientLayer.frame = _progressLayer.frame;

[gradientLayer setColors:[NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor],(id)[[UIColor yellowColor] CGColor],(id)[[UIColor blueColor] CGColor], nil]];

[gradientLayer setLocations:@[@0,@0.6,@1]];

[gradientLayer setStartPoint:CGPointMake(0, 0)];

[gradientLayer setEndPoint:CGPointMake(1, 0)];

//用progressLayer來截取漸變層 遮罩

[gradientLayer setMask:_progressLayer];

[self.layer addSublayer:gradientLayer];

//增加動畫

CABasicAnimation *pathAnimation=[CABasicAnimation animationWithKeyPath:@"strokeEnd"];

pathAnimation.duration = 2;

pathAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

pathAnimation.fromValue=[NSNumber numberWithFloat:0.0f];

pathAnimation.toValue=[NSNumber numberWithFloat:1.0f];

pathAnimation.autoreverses=NO;

_progressLayer.path=path.CGPath;

[_progressLayer addAnimation:pathAnimation forKey:@"strokeEndAnimation"];

}

return self;

}

@end

#import "ViewController.h"

#import "GredientLayerView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

GredientLayerView *gredientLayerView=[[GredientLayerView alloc]initWithFrame:CGRectMake(30, 100, 200, 200)];

[self.view addSubview:gredientLayerView];

}

遮罩層必須至少有兩個圖層,上面的一個圖層為“遮罩層”平项,下面的稱“被遮罩層”饼拍;這兩個圖層中只有相重疊的地方才會被顯示柑贞。也就是說在遮罩層中有對象的地方就是“透明”的扮饶,可以看到被遮罩層中的對象粉渠,而沒有對象的地方就是不透明的无畔,被遮罩層中相應位置的對象是看不見的闽寡。

它的原理是:上面一層是遮罩層,下面一層是被遮罩層相味。遮罩層上的圖拾积,自己是不顯示的。它只起到一個透光的作用。假定遮罩層上是一個正圓拓巧,那么光線就會透過這個圓形斯碌,射到下面的被遮罩層上,只會顯示一個圓形的圖形玲销。如果遮罩層上什么都沒有输拇,那么光線就無法透到下面來,那么下面的被遮罩層什么也顯示不出來贤斜。

之前一直疑惑當設置遮罩后,遮罩層并不顯示自身的樣式,例如我設置了遮罩層的strokeColor為紅色時,顯示的是被遮罩層,當設置為透明時被遮罩層也不顯示了,具體透明是什么樣的一個原理,暫且還沒弄明白,這里根據(jù)上面的遮罩層的原理就認為設置透明則就是上面的什么都沒有

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末策吠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瘩绒,更是在濱河造成了極大的恐慌猴抹,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锁荔,死亡現(xiàn)場離奇詭異蟀给,居然都是意外死亡,警方通過查閱死者的電腦和手機阳堕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門跋理,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恬总,你說我怎么就攤上這事前普。” “怎么了壹堰?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵拭卿,是天一觀的道長。 經(jīng)常有香客問我贱纠,道長峻厚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任谆焊,我火速辦了婚禮惠桃,結果婚禮上,老公的妹妹穿的比我還像新娘辖试。我一直安慰自己辜王,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布剃执。 她就那樣靜靜地躺著誓禁,像睡著了一般懈息。 火紅的嫁衣襯著肌膚如雪肾档。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音怒见,去河邊找鬼俗慈。 笑死,一個胖子當著我的面吹牛遣耍,可吹牛的內容都是我干的闺阱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼舵变,長吁一口氣:“原來是場噩夢啊……” “哼酣溃!你這毒婦竟也來了?” 一聲冷哼從身側響起纪隙,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赊豌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绵咱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碘饼,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年悲伶,在試婚紗的時候發(fā)現(xiàn)自己被綠了艾恼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡麸锉,死狀恐怖钠绍,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情淮椰,我是刑警寧澤五慈,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站主穗,受9級特大地震影響泻拦,放射性物質發(fā)生泄漏。R本人自食惡果不足惜忽媒,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一争拐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晦雨,春花似錦架曹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奥邮,卻和暖如春万牺,著一層夾襖步出監(jiān)牢的瞬間罗珍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工脚粟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留覆旱,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓核无,卻偏偏與公主長得像扣唱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子团南,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容