iOS 圓環(huán)漸變色動(dòng)畫

先上圖

Untitled1.gif

思路

1.自定義view靡馁,在- (void)drawRect:(CGRect)rect方法中用貝塞爾曲線畫一個(gè)圓成洗,設(shè)置中間的填充顏色為clear品姓, 增加邊框,設(shè)置邊框的顏色申尼。這樣就有一個(gè)圓環(huán)了祭阀。
2.根據(jù)slider的值給圓環(huán)的終點(diǎn)動(dòng)態(tài)賦值鹉戚,就可以動(dòng)起來(lái)了。
3.做漸變色专控。


主要代碼

在.h文件中

@property (nonatomic , strong)UILabel *progressLabel;//*中間label*/

@property (nonatomic , assign)CGFloat progress;//*progress*/

在.m文件中

- (void)setProgress:(CGFloat)progress {
    _progress = progress;
    self.progressLayer.opacity = 0;
    [self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect {
    
    CGPoint center = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2);
    CGFloat radius = 90;
    CGFloat start  = - M_PI_2; //設(shè)置起點(diǎn)
    CGFloat end    = - M_PI_2 + M_PI * 2 * self.progress;//設(shè)置終點(diǎn)
    
    //畫一個(gè)圓抹凳,填充色透明,設(shè)置邊框帶顏色伦腐,就是一個(gè)圓環(huán)
    self.progressLayer = [CAShapeLayer layer];
    self.progressLayer.frame = self.bounds;
    self.progressLayer.fillColor = [UIColor clearColor].CGColor; //填充顏色
    self.progressLayer.strokeColor = [UIColor greenColor].CGColor; //path填充的顏色赢底,即圓環(huán)的顏色
    self.progressLayer.lineCap = kCALineCapRound;//線邊緣是圓形
    self.progressLayer.lineWidth = 10;
    
    //用貝塞爾曲線畫圓
    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:start endAngle:end clockwise:YES];
    self.progressLayer.path = [bezierPath CGPath];
    [self.layer addSublayer:self.progressLayer];
    
    //添加漸變色
    
    CALayer *layer = [CALayer layer];
    
    CAGradientLayer *rightLayer = [CAGradientLayer layer];
    rightLayer.frame = CGRectMake(self.frame.size.width / 2, 0, self.frame.size.width / 2, self.frame.size.height);
    rightLayer.locations = @[@0.1,@0.8,@1];
    rightLayer.colors = @[(id)[UIColor redColor].CGColor,(id)[UIColor yellowColor].CGColor,(id)[UIColor greenColor].CGColor];
    [layer addSublayer:rightLayer];
    
    CAGradientLayer *leftLayer = [CAGradientLayer layer];
    leftLayer.frame = CGRectMake(0, 0, self.frame.size.width / 2, self.frame.size.height);
    leftLayer.locations = @[@0.1,@0.8,@1];
    leftLayer.colors = @[(id)[UIColor redColor].CGColor,(id)[UIColor yellowColor].CGColor,(id)[UIColor greenColor].CGColor];
    [layer addSublayer:leftLayer];
    
    [layer setMask:self.progressLayer];
    [self.layer addSublayer:layer];
    
}

#pragma mark ----------- 懶加載 -----------

- (UILabel *)progressLabel {
    if (_progressLabel == nil) {
        _progressLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
        _progressLabel.center = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2);
        _progressLabel.textAlignment = NSTextAlignmentCenter;
        [self addSubview:_progressLabel];
    }
    return _progressLabel;
}

在viewController中

#import "ViewController.h"
#import "SSYCycleView.h"        //**自定義view*/

@interface ViewController ()

@property (nonatomic , strong)SSYCycleView *cycleView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    
    [self createUI];
    
}

- (void)createUI {
    [self.view addSubview:self.cycleView];
    
    UISlider *slider = [[UISlider alloc]initWithFrame:CGRectMake(self.cycleView.frame.origin.x - 20, self.cycleView.frame.origin.y + self.cycleView.frame.size.height + 50, self.cycleView.frame.size.width + 40, 20)];
    [self.view addSubview:slider];
    
    //添加方法
    [slider addTarget:self action:@selector(sliderChangeMethod:) forControlEvents:UIControlEventValueChanged];
}

- (void)sliderChangeMethod:(UISlider *)sender {
    self.cycleView.progressLabel.text = [NSString stringWithFormat:@"%.2f%%", sender.value*100];
    self.cycleView.progress = sender.value;
}

#pragma mark ----------- 懶加載 -----------

- (SSYCycleView *)cycleView {
    if (_cycleView == nil) {
        _cycleView = [[SSYCycleView alloc]initWithFrame:CGRectMake(90, 100, 200, 200)];
        _cycleView.backgroundColor = [UIColor whiteColor];
    }
    return _cycleView;
}

@end

鏈接點(diǎn)這里

Github鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柏蘑,隨后出現(xiàn)的幾起案子幸冻,更是在濱河造成了極大的恐慌,老刑警劉巖咳焚,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洽损,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡革半,警方通過查閱死者的電腦和手機(jī)碑定,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門流码,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人延刘,你說(shuō)我怎么就攤上這事漫试。” “怎么了碘赖?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵驾荣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我崖疤,道長(zhǎng)秘车,這世上最難降的妖魔是什么典勇? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任劫哼,我火速辦了婚禮,結(jié)果婚禮上割笙,老公的妹妹穿的比我還像新娘权烧。我一直安慰自己,他們只是感情好伤溉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布般码。 她就那樣靜靜地躺著,像睡著了一般乱顾。 火紅的嫁衣襯著肌膚如雪板祝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天走净,我揣著相機(jī)與錄音券时,去河邊找鬼。 笑死伏伯,一個(gè)胖子當(dāng)著我的面吹牛橘洞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播说搅,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼炸枣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了弄唧?” 一聲冷哼從身側(cè)響起适肠,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎候引,沒想到半個(gè)月后侯养,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡背伴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年沸毁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了峰髓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡息尺,死狀恐怖携兵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搂誉,我是刑警寧澤徐紧,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站炭懊,受9級(jí)特大地震影響并级,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侮腹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一嘲碧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧父阻,春花似錦愈涩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至斟览,卻和暖如春毁腿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苛茂。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工已烤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人味悄。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓草戈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親侍瑟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子唐片,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容