CAShaperLayer(一)

CAShaper主要用于繪圖店煞,類似于直線苞慢、曲線诵原、各種圖形、貝塞爾曲線、虛線等等绍赛。下面主要介紹幾個常用的繪圖

GitHub工程地址本篇主要的內(nèi)容在Layer/CAShaperLayer/ShaperLayer

一蔓纠、先說下CAShaperLayer的屬性

/*
 * CAShapeLayer屬性解釋:
 *
 ** @property(nullable) CGPathRef path;
    呈現(xiàn)的形狀的路徑。賦值時吗蚌,路徑被復(fù)制腿倚。默認(rèn)為null
 ** @property(nullable) CGColorRef fillColor;
    填充路徑的顏色,或不需要填充蚯妇。默認(rèn)顏色為不透明的黑色敷燎。
 ** @property(copy) NSString *fillRule;
    當(dāng)在填充顏色的時候則就需要這種填充規(guī)則,值有兩種箩言,非零和奇偶數(shù)硬贯,但默認(rèn)是非零值。
 ** @property(nullable) CGColorRef strokeColor;
    設(shè)置描邊色陨收,默認(rèn)無色饭豹。
 ** @property CGFloat strokeStart; @property CGFloat strokeEnd;
    這兩個值被定義用于繪制邊線輪廓路徑的子區(qū)域。該值必須在[0,1]范圍畏吓,0代表路徑的開始墨状,1代表路徑的結(jié)束卫漫。在0和1之間的值沿路徑長度進行線性插值菲饼。strokestart默認(rèn)為0,strokeend默認(rèn)為1列赎。
 ** @property CGFloat lineWidth;
    lineWidth為線的寬度宏悦,默認(rèn)為1;
 ** @property CGFloat miterLimit;
    miterLimit為最大斜接長度包吝。斜接長度指的是在兩條線交匯處和外交之間的距離饼煞。只有l(wèi)ineJoin屬性為kCALineJoinMiter時miterLimit才有效。邊角的角度越小诗越,斜接長度就會越大砖瞧。為了避免斜接長度過長,我們可以使用miterLimit屬性嚷狞。如果斜接長度超過miterLimit的值块促,邊角會以lineJoin的“bevel”即kCALineJoinBevel類型來顯示。
 ** @property(copy) NSString *lineCap;
    lineCap為線端點類型床未,值有三個類型竭翠,分別為kCALineCapButt 、kCALineCapRound 薇搁、kCALineCapSquare斋扰,默認(rèn)值為Butt;
 ** @property(copy) NSString *lineJoin;
    lineJoin為線連接類型,其值也有三個類型传货,分別為kCALineJoinMiter屎鳍、kCALineJoinRound、kCALineJoinBevel问裕,默認(rèn)值是Miter
 ** @property CGFloat lineDashPhase;
    lineDashPhase為線型模版的起始位置
 ** @property(nullable, copy) NSArray<NSNumber *> *lineDashPattern;
    lineDashPattern為線性模版哥艇,這是一個NSNumber的數(shù)組,索引從1開始記僻澎,奇數(shù)位數(shù)值表示實線長度貌踏,偶數(shù)位數(shù)值表示空白長度。
 
 */

1窟勃、直線

/*線性的CAShapeLayer*/
- (CAShapeLayer *)lineLayer
{
    if(!_lineLayer){
        _lineLayer = [[CAShapeLayer alloc] init];
//        設(shè)置線條顏色
        _lineLayer.strokeColor = [UIColor redColor].CGColor;
//        設(shè)置線條寬度
        _lineLayer.lineWidth = 5;
//        繪制線條路徑
        UIBezierPath * path = [UIBezierPath bezierPath];
        [path moveToPoint:CGPointMake(50, 100)];
        [path addLineToPoint:CGPointMake(200, 100)];
//設(shè)置layer的path
        _lineLayer.path = path.CGPath;
    }
    return _lineLayer;
}

效果

直線

2.虛線

/*線性的CAShapeLayer*/
- (CAShapeLayer *)lineLayer
{
    if(!_lineLayer){
        _lineLayer = [[CAShapeLayer alloc] init];
//        設(shè)置線條顏色
        _lineLayer.strokeColor = [UIColor redColor].CGColor;
//        設(shè)置線條寬度
        _lineLayer.lineWidth = 5;
//        繪制線條路徑
        UIBezierPath * path = [UIBezierPath bezierPath];
        [path moveToPoint:CGPointMake(50, 100)];
        [path addLineToPoint:CGPointMake(200, 100)];
        //        連接類型為round祖乳,就是拐角處的線條類型
        _lineLayer.lineJoin = kCALineJoinRound;
        //線性模版,這是一個NSNumber的數(shù)組秉氧,索引從1開始記眷昆,奇數(shù)位數(shù)值表示實線長度,偶數(shù)位數(shù)值表示空白長度汁咏。下面表示的是一個等距等寬的虛線亚斋。
        _lineLayer.lineDashPattern = @[@5,@5];
//設(shè)置layer的path
        _lineLayer.path = path.CGPath;
    }
    return _lineLayer;
}

效果

虛線

3、弧線

/*弧線CAShapeLayer*/
- (CAShapeLayer *)radianLayer
{
    if(!_radianLayer){
        _radianLayer = [[CAShapeLayer alloc] init];
        _radianLayer.strokeColor = [UIColor orangeColor].CGColor;
//        設(shè)置fillColor填充色為透明攘滩,這樣繪制的時候才會以線的形式繪制
        _radianLayer.fillColor = [UIColor clearColor].CGColor;
//        設(shè)置layer的路徑
        UIBezierPath * path = [UIBezierPath bezierPath];
        [path moveToPoint:CGPointMake(50, 50)];
//        第一個參數(shù)為結(jié)束點帅刊,第二個參數(shù)為控制點
        [path addQuadCurveToPoint:CGPointMake(250, 250) controlPoint:CGPointMake(150, 300)];
        _radianLayer.path = path.CGPath;
        
    }
    return _radianLayer;
}

效果

弧線

4、曲線

/*曲線*/
- (CAShapeLayer *)curveLayer
{
    if(!_curveLayer){
        _curveLayer = [[CAShapeLayer alloc] init];
        _curveLayer.strokeColor = [UIColor greenColor].CGColor;
        _curveLayer.fillColor = [UIColor clearColor].CGColor;
//        繪制曲線
        UIBezierPath * path = [UIBezierPath bezierPath];
        [path moveToPoint:CGPointMake(50, 350)];
//        第一個參數(shù)是終點位置漂问;第二個參數(shù)是第一個控制點赖瞒;第三個參數(shù)是第二個控制點
        [path addCurveToPoint:CGPointMake(250, 350) controlPoint1:CGPointMake(100, 250) controlPoint2:CGPointMake(200, 450)];
        _curveLayer.path = path.CGPath;
    }
    return _curveLayer;
}

效果

曲線

5、空心圓

/*圓形CAShapeLayer*/
- (CAShapeLayer *)circleLayer
{
    if(!_circleLayer){
        
        _circleLayer = [[CAShapeLayer alloc] init];
        _circleLayer.strokeColor = [UIColor yellowColor].CGColor;
        _circleLayer.lineWidth = 5;
        _circleLayer.position = CGPointMake(70, 150);
        _circleLayer.fillColor = [UIColor clearColor].CGColor;
        UIBezierPath * path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 100, 100)];
        _circleLayer.path = path.CGPath;
    }
    return _circleLayer;
}

效果

空心圓

6蚤假、帶填充色的圓
空心圓和帶填充色的圓栏饮,代碼只有一處不同:

_circleLayer.fillColor = [UIColor redColor].CGColor;//填充色為紅色

_circleLayer.fillColor = [UIColor clearColor].CGColor;//填充色為透明

/*圓形CAShapeLayer*/
- (CAShapeLayer *)circleLayer
{
    if(!_circleLayer){
        
        _circleLayer = [[CAShapeLayer alloc] init];
        _circleLayer.strokeColor = [UIColor yellowColor].CGColor;
        _circleLayer.lineWidth = 5;
        _circleLayer.position = CGPointMake(70, 150);
        _circleLayer.fillColor = [UIColor redColor].CGColor;
        UIBezierPath * path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 100, 100)];
        _circleLayer.path = path.CGPath;
    }
    return _circleLayer;
}

效果

實心圓


這篇說道的是CAShaperLayer的基礎(chǔ)繪圖,下篇會介紹CAShaperLayer的動畫磷仰,主要介紹一個進度條和一個注水動畫


歡迎有問題的朋友們咨詢袍嬉,這里有個問題就是圓點虛線的繪制暫時還是不清楚,希望知道的朋友能給我評論下灶平,萬分感謝:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伺通,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子民逼,更是在濱河造成了極大的恐慌泵殴,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拼苍,死亡現(xiàn)場離奇詭異笑诅,居然都是意外死亡调缨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門吆你,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弦叶,“玉大人,你說我怎么就攤上這事妇多∩瞬福” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵者祖,是天一觀的道長立莉。 經(jīng)常有香客問我,道長七问,這世上最難降的妖魔是什么蜓耻? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮械巡,結(jié)果婚禮上刹淌,老公的妹妹穿的比我還像新娘。我一直安慰自己讥耗,他們只是感情好有勾,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著古程,像睡著了一般蔼卡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上籍琳,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天菲宴,我揣著相機與錄音,去河邊找鬼趋急。 笑死,一個胖子當(dāng)著我的面吹牛势誊,可吹牛的內(nèi)容都是我干的呜达。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼粟耻,長吁一口氣:“原來是場噩夢啊……” “哼查近!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挤忙,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤霜威,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后册烈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戈泼,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了大猛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扭倾。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挽绩,靈堂內(nèi)的尸體忽然破棺而出膛壹,到底是詐尸還是另有隱情,我是刑警寧澤唉堪,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布模聋,位于F島的核電站,受9級特大地震影響唠亚,放射性物質(zhì)發(fā)生泄漏撬槽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一趾撵、第九天 我趴在偏房一處隱蔽的房頂上張望侄柔。 院中可真熱鬧,春花似錦占调、人聲如沸暂题。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薪者。三九已至,卻和暖如春剿涮,著一層夾襖步出監(jiān)牢的瞬間言津,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工取试, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悬槽,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓瞬浓,卻偏偏與公主長得像初婆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子猿棉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

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