iOS 部分圓角+邊框的實(shí)現(xiàn)

部分圓角可以通過(guò) layer 的 mask 屬性實(shí)現(xiàn)。

1. 創(chuàng)建 UIBezierPath

關(guān)鍵參數(shù) corners,由于是 NS_OPTIONS枚舉,所以可以使用位運(yùn)算來(lái)達(dá)到設(shè)置多個(gè)圓角。

/* corners 的可能值
typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
    UIRectCornerTopLeft     = 1 << 0,
    UIRectCornerTopRight    = 1 << 1,
    UIRectCornerBottomLeft  = 1 << 2,
    UIRectCornerBottomRight = 1 << 3,
    UIRectCornerAllCorners  = ~0UL
};
*/
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(cornerRadius, cornerRadius)];

2. 創(chuàng)建 maskLayer

view.layer.mask 屬性會(huì)按照賦值的 layeralpha 通道來(lái)遮蓋 viewlayer,即 alpha 為0的部分會(huì)被隱藏。

CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = view.bounds;
maskLayer.path = path.CGPath;
view.layer.mask = maskLayer;

如果在添加了部分圓角之后,如果想要添加邊框,就不能使用 view.layer.cornerRadius 屬性來(lái)實(shí)現(xiàn),圓角部分會(huì)被裁剪??梢酝ㄟ^(guò)添加一層 subLayer 來(lái)實(shí)現(xiàn)。

3. 創(chuàng)建邊框 layer

還可以通過(guò)修CAShapeLayerline 相關(guān)的屬性,來(lái)改創(chuàng)建不同樣式的邊框。

CAShapeLayer *borderLayer = [CAShapeLayer layer];
borderLayer.frame = view.bounds;
borderLayer.path = path.CGPath;
borderLayer.lineWidth = borderWidth;
borderLayer.fillColor = [UIColor clearColor].CGColor;
borderLayer.strokeColor = borderColor.CGColor;
[view.layer addSublayer:borderLayer];

4. 效果

image.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)容

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