第一种方法:
这种方法对于有少数圆图的地方用起来比较方便,由于是对layer层进行的裁剪操作,所以是比较耗性能的
view有个属性叫layer
let imageView = UIImageView()
// 半径设置为这个图片大小的一半,则图片就会显示为一个等大的圆形图片
imageView.layer.cornerRadius =10
self.layer.masksToBounds =true
第二种方法:这种方法是重绘了一个圆形图片,适用于列表含有多个头像的时候,比较节省性能
// 设置图片圆角扩展
extension UIImageView {
/**
* 设置圆形的图片
* param: urlStr 网络图片地址
* param: placeholderStr 占位图片名称
* param: radius 圆角半径
*/
func setImageOfRound(urlStr :String, placeholderStr :String, radius :CGFloat) {
self.sd_setImageWithURL(NSURL(string: urlStr), placeholderImage:UIImage(named: placeholderStr)) { (image, error, cacheType, url)in
self.cornerRadius(radius: radius)
}
}
/**
* param: radius 圆角半径
* 注意:只有当imageView.image不为nil时,调用此方法才有效果
*/
func cornerRadius(radius radius:CGFloat) {
// 开始图形上下文
UIGraphicsBeginImageContextWithOptions(self.bounds.size,false,UIScreen.mainScreen().scale)
// 获得图形上下文
let ctx =UIGraphicsGetCurrentContext()
// 根据一个rect创建一个椭圆
CGContextAddEllipseInRect(ctx,self.bounds)
// 裁剪
CGContextClip(ctx)
// 将原照片画到图形上下文
self.image!.drawInRect(self.bounds)
// 从上下文上获取剪裁后的照片
let newImage =UIGraphicsGetImageFromCurrentImageContext()
// 关闭上下文
UIGraphicsEndImageContext()
self.image = newImage
}
}