如何创build只有左上angular和左下angular半径的圆angularUIButton

我需要创build一个左上angular和左下angular半径的button,就像这个 在这里输入图像说明 。 我尝试通过创build以下从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 } } 

然后调用这样的方法:

 self.collectionBtn.roundCorners(.TopLeft | .BottomLeft, radius: cornerRadius) 

此代码生成以下形状 在这里输入图像说明

那为什么左上angular和左下angular不可见? 我应该怎么做才能使其可见?

你的代码是在你的button上应用一个遮罩层。 导致您在掩模图层中安装的graphics之外的任何内容被遮罩。 当你安装一个带有圆angular的path时,它实质上是“刮掉”了两个angular落。 这不是你想要的。

您可能需要创build一个形状图层,并将其安装为button图层的常规子图层,而不是作为遮罩层。 然而,你需要设置填充颜色来清除。

像这样改变你的代码:

 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); } } 

编辑:

你在Swift 2中设置angular点的语法将不起作用:

 self.collectionBtn.roundCorners(.TopLeft | .BottomLeft, radius: 10) 

应该

 self.collectionBtn.roundCorners([.TopLeft, .BottomLeft], radius: 10) 

这里是你如何做到这一点:

 CGRect maskRect = CGRectMake(0.0, 0.0, CGRectGetWidth(<#something here#>), CGRectGetHeight(<#something here#>)); CAShapeLayer *maskLayer = [CAShapeLayer layer]; UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:maskRect byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerTopLeft) cornerRadii:CGSizeMake(<#corner radius#>, <#corner radius#>)]; maskLayer.path = path.CGPath; self.layer.mask = maskLayer;