談到設置圓角頭像的問題,我想大多數人第一反應想到的是設置圖像的 layerapi
let imageV: UIImageView = UIImageView()async
imageV.layer.cornerRadius = 26性能
imageV.layer.masksToBounds = true優化
這是一種方式,但在開發中,這樣設置圓角頭像須要作切割,這時候就須要 CPU 進行計算,還有像設置陰影,設置透明,修改 alpha 值,這些都是不容許的,或者說這是很消耗性能的,特別是在 tableView 中,當咱們去滾動 tableView 的時候,CPU 就須要作大量的計算,這是至關消耗性能的,因此想到下面的方式來作:spa
通常底層的東西效率都是最高的,因此咱們想到使用繪製的辦法,來設置圓角頭像線程
func createCircleImage(color: UIColor = UIColor.white, size: CGSize = CGSize(width: 1, height: 1), callBack:@escaping (UIImage?)->()) {圖片
DispatchQueue.global().async {ip
let rect = CGRect(origin: CGPoint.zero, size: size)ci
//1. 開始圖形上下文開發
UIGraphicsBeginImageContext(size)
//2. 設置顏色
color.setFill()
//3. 顏色填充
UIRectFill(rect)
//圓形裁切
let path = UIBezierPath(ovalIn: rect)
path.addClip()
self.draw(in: rect)
//4. 從圖形上下文獲取圖片
let image = UIGraphicsGetImageFromCurrentImageContext()
//5. 關閉圖形上下文
UIGraphicsEndImageContext()
//在主線程更新UI
DispatchQueue.main.async {
callBack(image)
}
}
}
//設置圓角圖像
image?.createCircleImage(size: CGSize(width: 35, height: 35), callBack: { (circleImage) in
self.userIcon.image = circleImage
})
這時在 滾動tableView 時,對於程序的性能就會優化不少