swift 设置圆角的三种方法

方法一:在代码中,通过 cornerRadius 属性设置

  /**
   *  masksToBounds时CALayer的方法;clipsToBounds是UIView的方法
   *  最终会调用masksToBounds方法, 所以用masksToBounds省资源一点。
   */
  //  self.clipsToBounds = YES;
  self.layer.masksToBounds = YES;
  self.layer.cornerRadius = 3;

方法二:在 storyboard 或 xib 中通过 KVC 设置

swift 设置圆角的三种方法_第1张图片
设置圆角.png

方法三:在背景是纯色的情况下,用同色镂空图覆盖(取巧).

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~

你可能感兴趣的:(swift 设置圆角的三种方法)