談到設置圓角頭像的問題,我想大多數人第一反應想到的是設置圖像的 layer let imageV: UIImageView = UIImageView() imageV.layer.cornerRadius = 26 imageV.layer.masksToBounds = true 這是一種方式, ...
談到設置圓角頭像的問題,我想大多數人第一反應想到的是設置圖像的 layer
let imageV: UIImageView = UIImageView()
imageV.layer.cornerRadius = 26
imageV.layer.masksToBounds = true
這是一種方式,但在開發中,這樣設置圓角頭像需要做切割,這時候就需要 CPU 進行計算,還有像設置陰影,設置透明,修改 alpha 值,這些都是不允許的,或者說這是很消耗性能的,特別是在 tableView 中,當我們去滾動 tableView 的時候,CPU 就需要做大量的計算,這是相當消耗性能的,所以想到下麵的方式來做:
一般底層的東西效率都是最高的,所以我們想到使用繪製的辦法,來設置圓角頭像
func createCircleImage(color: UIColor = UIColor.white, size: CGSize = CGSize(width: 1, height: 1), callBack:@escaping (UIImage?)->()) {
DispatchQueue.global().async {
let rect = CGRect(origin: CGPoint.zero, size: size)
//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 時,對於程式的性能就會優化很多