方法一:在代码中,通过 cornerRadius 属性设置
/**
* masksToBounds时CALayer的方法;clipsToBounds是UIView的方法
* 最终会调用masksToBounds方法, 所以用masksToBounds省资源一点。
*/
// self.clipsToBounds = YES;
self.layer.masksToBounds = YES;
self.layer.cornerRadius = 3;
方法二:在 storyboard 或 xib 中通过 KVC 设置
方法三:在背景是纯色的情况下,用同色镂空图覆盖(取巧).
extension UIView{
/**
添加镂空边框
*/
func addHollowBorder() {
let hollowB = UIImageView.init(frame: self.bounds)
hollowB.image = UIImage.init(named: "round_bg")
self.addSubview(hollowB)
}
}
//设置圆角
roundImageView.image = UIImage.init(named: "ICON108")
roundImageView.addHollowBorder()
方法四:在 UIImage 的类别中添加设置圆角的方法,通过绘图的方式实现圆角
extension UIImage{
/**
设置是否是圆角(默认:3.0,图片大小)
*/
func isRoundCorner() -> UIImage{
return self.isRoundCorner(3.0, size: self.size)
}
/**
设置是否是圆角
- parameter radius: 圆角大小
- parameter size: size
- returns: 圆角图片
*/
func isRoundCorner(radius:CGFloat,size:CGSize) -> UIImage {
let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: size)
//开始图形上下文
UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.mainScreen().scale)
//绘制路线
CGContextAddPath(UIGraphicsGetCurrentContext(),
UIBezierPath(roundedRect: rect,
byRoundingCorners: UIRectCorner.AllCorners,
cornerRadii: CGSize(width: radius, height: radius)).CGPath)
//裁剪
CGContextClip(UIGraphicsGetCurrentContext())
//将原图片画到图形上下文
self.drawInRect(rect)
CGContextDrawPath(UIGraphicsGetCurrentContext(), .FillStroke)
let output = UIGraphicsGetImageFromCurrentImageContext();
//关闭上下文
UIGraphicsEndImageContext();
return output
}
/**
设置圆形图片
- returns: 圆形图片
*/
func isCircleImage() -> UIImage {
//开始图形上下文
UIGraphicsBeginImageContextWithOptions(self.size, false, UIScreen.mainScreen().scale)
//获取图形上下文
let contentRef:CGContextRef = UIGraphicsGetCurrentContext()!
//设置圆形
let rect = CGRectMake(0, 0, self.size.width, self.size.height)
//根据 rect 创建一个椭圆
CGContextAddEllipseInRect(contentRef, rect)
//裁剪
CGContextClip(contentRef)
//将原图片画到图形上下文
self.drawInRect(rect)
//从上下文获取裁剪后的图片
let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()
//关闭上下文
UIGraphicsEndImageContext()
return newImage
}
}
//设置圆形图片
roundImageView.image = UIImage.init(named: "ICON108")?.isCircleImage()
//设置圆角
roundImageView.image = UIImage.init(named: "ICON108")?.isRoundCorner()
roundImageView.image = UIImage.init(named: "ICON108")?.isRoundCorner(3.0, size: roundImageView.frame.size)
总结: 如果有多处需要设置圆角,比如在列表视图中,建议使用方法三或方法四,因为前两种方法如果使用的图层过量会有卡顿现象,而后两种方法效率较高; 如果只有个别地方需要设置圆角,可使用方法一和方法二,比较方便
期待你的评论建议O(∩_∩)O~