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

圓角是 iOS 開發中非常常見的需求,但是普通的圓角實現會比較消耗性能,特別是在滾動視圖中會出現卡頓的情況。下面介紹兩種高性能的圓角實現方式。

方案一:使用 CAShapeLayer

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

示例代碼:

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
    }
}

使用時,只需要調用該方法并傳入需要的圓角半徑即可:

myView.addCornerRadius(10)

方案二:使用 UIImageView 和 Core Graphics

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

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
    }
}

該方法先創建一個 UIImageView,并將當前視圖的快照設置為其 image 屬性,然后對該 UIImageView 應用圓角效果。需要注意的是,該方法在獲取快照時會消耗一些性能和內存。

使用時,只需要調用該方法并傳入需要的圓角半徑即可:

myView.addCornerRadius(10)

這兩種方法都可以用于任何 UIView 的子類,例如 UIButton、UILabel、UIImageView 等等。需要根據具體情況選擇合適的方法來實現圓角效果。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容