圓角是 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)圓角效果。