Swift UIview常用的擴展方法暴氏、圓角(2)

有時候延塑,我們可能只想給 UIView 的某一個或多個角設(shè)置圓角,而不是四個角都設(shè)置答渔。在這種情況下关带,我們可以使用 UIBezierPath 來指定圓角的位置。

下面是一個例子沼撕,展示了如何只給 UIView 的左上角和右下角設(shè)置圓角:

extension UIView {
    func addCornerRadius(_ radius: CGFloat, corners: UIRectCorner) {
        let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        layer.mask = mask
    }
}

在上述方法中宋雏,我們使用 UIBezierPath 的 roundedRect 方法來創(chuàng)建一個指定角度圓角的矩形路徑芜飘。方法中的 corners 參數(shù)用來指定需要圓角的角,可以是左上角磨总、右上角嗦明、左下角、右下角的組合蚪燕。例如娶牌,如果你只想要左上角和右下角有圓角,你可以這樣調(diào)用方法:

myView.addCornerRadius(10, corners: [.topLeft, .bottomRight])

需要注意的是邻薯,這種方法依然需要進(jìn)行視圖裁剪裙戏,因此可能會比普通的圓角效果稍微消耗一些性能乘凸。

實現(xiàn)高性能的圓角效果需要注意以下幾個方面:

1厕诡、避免離屏渲染:當(dāng)使用 CALayer 的 cornerRadius 屬性時,如果視圖需要離屏渲染营勤,性能會受到影響灵嫌。因此,應(yīng)該盡量避免使用過多的離屏渲染葛作。

2寿羞、使用貝塞爾曲線:使用 UIBezierPath 的 addArc 方法可以創(chuàng)建一個具有圓角的路徑,比使用 CALayer 的 cornerRadius 屬性更加靈活赂蠢,可以控制每個角的大小绪穆。

3、使用 CAShapeLayer:使用 CAShapeLayer 作為視圖的 mask 可以避免離屏渲染虱岂,并且性能比使用 CALayer 的 cornerRadius 屬性更好玖院。

4、緩存圖片:如果需要頻繁地創(chuàng)建圓角圖片第岖,可以將圖片緩存起來难菌,避免多次生成,提高性能蔑滓。

5郊酒、去掉視圖背景色:如果視圖的背景色為不透明色,可以將其去掉键袱,以避免不必要的繪制燎窘,提高性能。

6蹄咖、控制圓角半徑:圓角半徑越大褐健,需要繪制的像素越多,性能也會受到影響比藻。因此铝量,應(yīng)該盡量控制圓角半徑的大小倘屹,避免過大。

7慢叨、控制圓角數(shù)量:圓角數(shù)量越多纽匙,需要繪制的像素越多,性能也會受到影響拍谐。因此,應(yīng)該盡量減少圓角的數(shù)量轩拨。

綜上所述践瓷,實現(xiàn)高性能的圓角效果需要綜合考慮多個因素,包括繪制方式亡蓉、緩存機制晕翠、視圖設(shè)置等等。在實際開發(fā)中砍濒,需要根據(jù)具體情況選擇最適合的實現(xiàn)方案淋肾,以達(dá)到最佳的性能和用戶體驗。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爸邢,一起剝皮案震驚了整個濱河市樊卓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杠河,老刑警劉巖碌尔,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異券敌,居然都是意外死亡唾戚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門陪白,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颈走,“玉大人,你說我怎么就攤上這事咱士×⒂桑” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵序厉,是天一觀的道長锐膜。 經(jīng)常有香客問我,道長弛房,這世上最難降的妖魔是什么道盏? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上荷逞,老公的妹妹穿的比我還像新娘媒咳。我一直安慰自己,他們只是感情好种远,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布涩澡。 她就那樣靜靜地躺著,像睡著了一般坠敷。 火紅的嫁衣襯著肌膚如雪妙同。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天膝迎,我揣著相機與錄音粥帚,去河邊找鬼。 笑死限次,一個胖子當(dāng)著我的面吹牛芒涡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掂恕,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼拖陆,長吁一口氣:“原來是場噩夢啊……” “哼弛槐!你這毒婦竟也來了懊亡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤乎串,失蹤者是張志新(化名)和其女友劉穎店枣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叹誉,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡鸯两,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了长豁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钧唐。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖匠襟,靈堂內(nèi)的尸體忽然破棺而出钝侠,到底是詐尸還是另有隱情,我是刑警寧澤酸舍,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布帅韧,位于F島的核電站,受9級特大地震影響啃勉,放射性物質(zhì)發(fā)生泄漏忽舟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叮阅。 院中可真熱鬧刁品,春花似錦、人聲如沸浩姥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽及刻。三九已至镀裤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缴饭,已是汗流浹背暑劝。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颗搂,地道東北人担猛。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像丢氢,于是被迫代替她去往敵國和親傅联。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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