如何仅创建具有左上角和左下角半径的圆角UIButton

Lin*_*Sid 4 uibutton ios uibezierpath swift

我需要像这样创建一个左上角和左下角半径的按钮 在此输入图像描述.我尝试创建以下扩展,取自stackoverflow之一:

extension UIButton {

   func roundCorners(corners:UIRectCorner, radius: CGFloat) {
       self.layer.borderColor = GenerateShape.UIColorFromHex(0x989898, alpha: (1.0-0.3)).CGColor
       self.layer.borderWidth = 1.0
       let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
       let mask = CAShapeLayer()
       mask.path = path.CGPath
       self.layer.mask = mask

   }
}
Run Code Online (Sandbox Code Playgroud)

然后调用这样的方法:

self.collectionBtn.roundCorners(.TopLeft | .BottomLeft, radius: cornerRadius) 
Run Code Online (Sandbox Code Playgroud)

此代码生成以下形状 在此输入图像描述

那么为什么左上角和左下角看不见呢?我该怎么办才能让它们可见?

Dun*_*n C 7

您的代码正在为您的按钮应用遮罩层.这会导致您在遮罩层中安装的形状之外的任何内容被遮盖掉.安装带圆角的路径时,它基本上会"刮掉"2个角.那不是你想要的.

您可能想要创建一个形状图层并将其安装为按钮图层的常规子图层,而不是作为遮罩图层.但是,您需要将填充颜色设置为清除.

像这样更改你的代码:

extension UIButton 
{
  func roundCorners(corners:UIRectCorner, radius: CGFloat) 
  {
    let borderLayer = CAShapeLayer()
    borderLayer.frame = self.layer.bounds
    borderLayer.strokeColor = GenerateShape.UIColorFromHex(0x989898, 
      alpha: (1.0-0.3)).CGColor
    borderLayer.fillColor = UIColor.clearColor().CGColor
    borderLayer.lineWidth = 1.0
    let path = UIBezierPath(roundedRect: self.bounds, 
      byRoundingCorners: corners, 
      cornerRadii: CGSize(width: radius, height: radius))
    borderLayer.path = path.CGPath
    self.layer.addSublayer(borderLayer);
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

设置角落的语法在Swift 2中不起作用:

self.collectionBtn.roundCorners(.TopLeft | .BottomLeft, radius: 10)
Run Code Online (Sandbox Code Playgroud)

应该

self.collectionBtn.roundCorners([.TopLeft, .BottomLeft], radius: 10)
Run Code Online (Sandbox Code Playgroud)