iOS-關(guān)于漸變進(jìn)度條的創(chuàng)建

先看一下效果圖

如圖.gif

介紹一下:就是長(zhǎng)按圓圈部位,進(jìn)度條出現(xiàn)瓷们,當(dāng)你長(zhǎng)按的時(shí)間到達(dá)規(guī)定時(shí)間(時(shí)間可自己設(shè)置)业栅,完成當(dāng)前操作。

共有兩個(gè)難點(diǎn)

1谬晕、按壓開(kāi)始碘裕,進(jìn)度條開(kāi)始運(yùn)動(dòng)
2、進(jìn)度條的漸變

一固蚤、界面繪制

1娘汞、自定義View,LHButton
2夕玩、LHButton上添加長(zhǎng)按手勢(shì)
3、添加timer,每次timer結(jié)束繪制一次界面
4惊豺、添加CAShapeLayer 加入path路徑 根據(jù)它的strokeEnd屬性來(lái)繪制

@property (nonatomic, assign) CGFloat progress;
@property (nonatomic, strong) NSTimer *displayline;
/** 進(jìn)度條圖層 */
@property (nonatomic, strong) CAShapeLayer *progressLayer;

-(CAShapeLayer *)progressLayer{
    if (_progressLayer == nil) {
        _progressLayer = [CAShapeLayer layer];
        _progressLayer.fillColor = [UIColor clearColor].CGColor;
        _progressLayer.strokeColor = KWhiteColor.CGColor;
        _progressLayer.lineWidth = 0;
        _progressLayer.strokeEnd = 0;
        _progressLayer.lineCap = kCALineCapRound;
        CGRect progressFrame = CGRectMake(3, 3, self.bounds.size.width-6, self.bounds.size.width-6);
        UIBezierPath *progressPath = [UIBezierPath bezierPathWithRoundedRect:progressFrame cornerRadius:progressFrame.size.height/2];
        _progressLayer.path = progressPath.CGPath;
    }
    return _progressLayer;
}
-(NSTimer *)displayline{
    if (_displayline == nil) {
        _displayline = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(lineRun) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop]addTimer:_displayline forMode:NSRunLoopCommonModes];
        [self.displayline setFireDate:[NSDate distantFuture]];
    }
    return  _displayline;
}
-(void)lineRun{
    self.temInterval = self.temInterval+1/10.0;
    self.progress = self.temInterval/self.interval;
//    NSLog(@"%.2f",self.progress);
    if (self.temInterval >= self.interval) {
        [self stop];
        self.actionState(LHProgressButtonStateEnd);
    }
    [self setNeedsDisplay];
}

二燎孟、進(jìn)度條漸變的問(wèn)題

剛開(kāi)始是想通過(guò)layer的strokeColor來(lái)設(shè)置,但是發(fā)現(xiàn)strokeColor只能設(shè)置一次尸昧,無(wú)法達(dá)到漸變效果揩页,然后就改變思路,通過(guò)蒙版來(lái)實(shí)現(xiàn)

-(UIView *)gradientBackgroundView{
    if (_gradientBackgroundView == nil) {
        
        // 漸變背景視圖(不包含坐標(biāo)軸)
       _gradientBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)];
        /** 創(chuàng)建并設(shè)置漸變背景圖層 */
        //初始化CAGradientlayer對(duì)象烹俗,使它的大小為漸變背景視圖的大小
        self.gradientLayer = [CAGradientLayer layer];
        self.gradientLayer.frame = self.gradientBackgroundView.bounds;
        //設(shè)置漸變區(qū)域的起始和終止位置(范圍為0-1)爆侣,即漸變路徑
        self.gradientLayer.startPoint = CGPointMake(0, 0.0);
        self.gradientLayer.endPoint = CGPointMake(0.0, 1.0);
        //設(shè)置顏色的漸變過(guò)程
        self.gradientLayerColors = [NSMutableArray arrayWithArray:@[(__bridge id)[UIColor colorWithRed:253 / 255.0 green:164 / 255.0 blue:8 / 255.0 alpha:1.0].CGColor, (__bridge id)[UIColor colorWithRed:251 / 255.0 green:37 / 255.0 blue:45 / 255.0 alpha:1.0].CGColor]];
        self.gradientLayer.colors = self.gradientLayerColors;
        //將CAGradientlayer對(duì)象添加在我們要設(shè)置背景色的視圖的layer層
        [_gradientBackgroundView.layer addSublayer:self.gradientLayer];
    }
    return _gradientBackgroundView;
}

然后上蒙版

mask的理解

mask是CALayer的一個(gè)屬性,它本身也是一個(gè)CALayer類幢妄。我們使用該屬性主要是為了讓兩個(gè)圖層搭配出一個(gè)新的視覺(jué)效果兔仰,簡(jiǎn)單理解就是一個(gè)遮罩,mask圖層區(qū)域外的任何區(qū)域不顯示蕉鸳。

 // 設(shè)置折線圖層為漸變圖層的mask
    self.gradientBackgroundView.layer.mask = self.progressLayer;

三乎赴、到這就基本差不多了

如圖.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末忍法,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子榕吼,更是在濱河造成了極大的恐慌饿序,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羹蚣,死亡現(xiàn)場(chǎng)離奇詭異原探,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)顽素,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門踢匣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人戈抄,你說(shuō)我怎么就攤上這事离唬。” “怎么了划鸽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵输莺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我裸诽,道長(zhǎng)嫂用,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任丈冬,我火速辦了婚禮嘱函,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘埂蕊。我一直安慰自己往弓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蓄氧。 她就那樣靜靜地躺著函似,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喉童。 梳的紋絲不亂的頭發(fā)上撇寞,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音堂氯,去河邊找鬼蔑担。 笑死,一個(gè)胖子當(dāng)著我的面吹牛咽白,可吹牛的內(nèi)容都是我干的啤握。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼局扶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼恨统!你這毒婦竟也來(lái)了叁扫?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤畜埋,失蹤者是張志新(化名)和其女友劉穎莫绣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體悠鞍,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡对室,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咖祭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片污筷。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡兽掰,死狀恐怖魁巩,靈堂內(nèi)的尸體忽然破棺而出暴心,到底是詐尸還是另有隱情,我是刑警寧澤浩嫌,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布檐迟,位于F島的核電站,受9級(jí)特大地震影響码耐,放射性物質(zhì)發(fā)生泄漏追迟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一骚腥、第九天 我趴在偏房一處隱蔽的房頂上張望敦间。 院中可真熱鬧,春花似錦束铭、人聲如沸廓块。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)剿骨。三九已至,卻和暖如春埠褪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挤庇。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工钞速, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫡秕。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓渴语,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親昆咽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驾凶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355