Swift UIview常用的擴展方法内列、圓角(1)

圓角是 iOS 開發(fā)中非常常見的需求杭煎,但是普通的圓角實現(xiàn)會比較消耗性能恩够,特別是在滾動視圖中會出現(xiàn)卡頓的情況。下面介紹兩種高性能的圓角實現(xiàn)方式羡铲。

方案一:使用 CAShapeLayer

這種方法使用 CAShapeLayer 和貝塞爾曲線來實現(xiàn)圓角效果蜂桶,具有很高的性能和可定制性。

示例代碼:

extension UIView {
    func addCornerRadius(_ radius: CGFloat) {
        let path = UIBezierPath(roundedRect: self.bounds, cornerRadius: radius)
        let shape = CAShapeLayer()
        shape.path = path.cgPath
        self.layer.mask = shape
    }
}

使用時犀勒,只需要調(diào)用該方法并傳入需要的圓角半徑即可:

myView.addCornerRadius(10)

方案二:使用 UIImageView 和 Core Graphics

這種方法使用 UIImageView 和 Core Graphics 來實現(xiàn)圓角效果屎飘,相對來說會消耗更多的內(nèi)存,但是在某些情況下可能比第一種方法更高效贾费。

extension UIView {
    func addCornerRadius(_ radius: CGFloat) {
        let imageView = UIImageView(frame: self.bounds)
        imageView.image = self.snapshot
        imageView.layer.cornerRadius = radius
        imageView.layer.masksToBounds = true
        self.addSubview(imageView)
    }
    
    var snapshot: UIImage? {
        UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0.0)
        drawHierarchy(in: bounds, afterScreenUpdates: true)
        let snapshotImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return snapshotImage
    }
}

該方法先創(chuàng)建一個 UIImageView钦购,并將當前視圖的快照設置為其 image 屬性,然后對該 UIImageView 應用圓角效果褂萧。需要注意的是押桃,該方法在獲取快照時會消耗一些性能和內(nèi)存。

使用時导犹,只需要調(diào)用該方法并傳入需要的圓角半徑即可:

myView.addCornerRadius(10)

這兩種方法都可以用于任何 UIView 的子類唱凯,例如 UIButton、UILabel谎痢、UIImageView 等等磕昼。需要根據(jù)具體情況選擇合適的方法來實現(xiàn)圓角效果。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末节猿,一起剝皮案震驚了整個濱河市票从,隨后出現(xiàn)的幾起案子漫雕,更是在濱河造成了極大的恐慌,老刑警劉巖峰鄙,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浸间,死亡現(xiàn)場離奇詭異,居然都是意外死亡吟榴,警方通過查閱死者的電腦和手機魁蒜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吩翻,“玉大人兜看,你說我怎么就攤上這事》乱埃” “怎么了铣减?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵她君,是天一觀的道長脚作。 經(jīng)常有香客問我,道長缔刹,這世上最難降的妖魔是什么球涛? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮校镐,結果婚禮上亿扁,老公的妹妹穿的比我還像新娘。我一直安慰自己鸟廓,他們只是感情好从祝,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著引谜,像睡著了一般牍陌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上员咽,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天毒涧,我揣著相機與錄音,去河邊找鬼贝室。 笑死契讲,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的滑频。 我是一名探鬼主播捡偏,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼峡迷!你這毒婦竟也來了银伟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枣申,沒想到半個月后售葡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡忠藤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年挟伙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片模孩。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡尖阔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出榨咐,到底是詐尸還是另有隱情介却,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布块茁,位于F島的核電站齿坷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏数焊。R本人自食惡果不足惜永淌,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佩耳。 院中可真熱鬧遂蛀,春花似錦、人聲如沸干厚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛮瞄。三九已至所坯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裕坊,已是汗流浹背包竹。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留籍凝,地道東北人周瞎。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像饵蒂,于是被迫代替她去往敵國和親声诸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 1. 擴展view退盯,給他的子類控件添加點擊方法 extensionUIView {funcaddTap(_aBlo...
    光光6閱讀 421評論 0 2
  • 1彼乌、改變 UITextField 占位文字 顏色和去掉底部白框 [_userName setValue:[UICo...
    i_MT閱讀 1,027評論 0 2
  • NSString *bounds = NSStringFromCGRect( view1.bounds);//求出...
    向日葵_wwx閱讀 297評論 0 0
  • 1 命名 使用駝峰式給類泻肯,方法或者變量等。類命名必須大寫慰照,然后方法名和變量應該以小寫字母開始灶挟。 eg 首選的 pr...
    Marc_Steven閱讀 754評論 0 0
  • 父類實現(xiàn)深拷貝時,子類如何實現(xiàn)深度拷貝毒租。父類沒有實現(xiàn)深拷貝時稚铣,子類如何實現(xiàn)深度拷貝。? 深拷貝同淺拷貝的區(qū)別:淺拷...
    JonesCxy閱讀 991評論 1 7