如何對(duì)UIView可控制性的圓角

默認(rèn)情況下,我們可以通過(guò)self.view.layer.cornerRadius = 20設(shè)置圓角,但是這種方式會(huì)對(duì)四個(gè)角都有影響,那么我們是否可以控制性的對(duì)某些角(如左上、右下等)設(shè)置呢?如果可行,如何操作呢?
   
其實(shí)在蘋果近乎完美的SDK下是完全可以實(shí)現(xiàn)的,這里我們只需要知道3個(gè)概念即可:
1、CAShapeLayer
2、UIBezierPath
3、mask

CAShapeLayer是Core Animation世界下CALayer的子類,它最大的好處是可以繪制不規(guī)則的形狀,當(dāng)然CALayer也是可以的,但是CAShapeLayer相比CALayer有較多的好處:
A、渲染快速,它使用了硬件加速
B、高效使用內(nèi)存,它未使用寄宿圖形(contens)
C、不會(huì)出現(xiàn)像素化
...

UIBezierPath是CGPath的Objective-C化,它完全面向?qū)ο蠡?,我們可以比較方便的使用它創(chuàng)建任意形狀。其中UIBezierPath有一個(gè)函數(shù)可以使某個(gè)矩形可控制性的圓角:bezierPathWithRoundedRect

CALayer有一個(gè)屬性mask,它的類型也是CALayer。給定layer一個(gè)mask layer,那么原有的layer就會(huì)按mask layer的輪廓進(jìn)行截取(按輪廓截取其實(shí)又可總結(jié)一篇文章,下次再說(shuō)?。?。

以上3個(gè)概念足以完成我們對(duì)圓角可控制性的操作了,代碼如下:

swift:

    let shapeLayer = CAShapeLayer()
    let rect = self.imageView.bounds
    let radii = CGSizeMake(20, 20)
    let path = UIBezierPath.init(roundedRect: rect, byRoundingCorners: [UIRectCorner.TopLeft, UIRectCorner.BottomLeft, UIRectCorner.TopRight], cornerRadii: radii)
    shapeLayer.path = path.CGPath
    self.imageView.layer.mask = shapeLayer

objc(核心代碼,其他參考swift版本):

CGRect rect = CGRectMake(50, 50, 100, 100);
CGSize radii = CGSizeMake(20, 20);
UIRectCorner corners = UIRectCornerTopRight | UIRectCornerBottomRight |     UIRectCornerBottomLeft;
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corners     cornerRadii:radii]; 

效果:

Simulator Screen Shot Feb 15, 2016, 14.42.00.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,323評(píng)論 4 61
  • 郵輪旅游誕生已超過(guò)百年,從一種奢華、風(fēng)靡上流社會(huì)的出行方式逐漸走向平民化。 2006年,嘉年華集團(tuán)旗下詩(shī)歌達(dá)郵輪“...
    常旅達(dá)人閱讀 1,445評(píng)論 1 0
  • 看著學(xué)校新來(lái)實(shí)習(xí)的妹妹們,她們都20左右的年紀(jì),青春活力,有自己的個(gè)性,有自己的方向,所以最近我也時(shí)?;貞涍^(guò)去...
    不合適又放不下的梗閱讀 183評(píng)論 0 2
  • 文/塵間紅葉 01 傍晚時(shí)分,天色有些暗沉,厚厚的云層里悄悄醞釀著一場(chǎng)雨。我提議去隔壁的大學(xué)南苑走走,兒子說(shuō),現(xiàn)在...
    塵間紅葉閱讀 777評(píng)論 9 8

友情鏈接更多精彩內(nèi)容