Cómo crear un button UIB networkingondeado con radio de esquina superior izquierda y inferior izquierda solamente

Necesito crear un button con el radio de esquina superior izquierdo y inferior izquierdo como este introduzca la descripción de la imagen aquí . Intenté creando la siguiente extensión que se tomó de una de las respuestas 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 } } 

luego llamé al método así:

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

este código genera la siguiente forma introduzca la descripción de la imagen aquí

Entonces, ¿por qué la esquina superior izquierda y la esquina inferior izquierda son invisibles? ¿Qué debo hacer para que sean visibles?

Su código está aplicando una capa de máscara a su button. que hace que cualquier cosa fuera de la forma que instales en la capa de máscara se enmascare. Cuando instala una ruta con esquinas networkingondeadas, esencialmente "afeita" las 2 esquinas. Eso no es lo que quieres.

Probablemente quiera crear una capa de forms e instalarla como una subcapa normal de la capa de su button, no como la capa de máscara. Sin embargo, necesitará configurar el color de relleno para borrar.

Cambia tu código de esta manera:

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

EDITAR:

Su syntax para configurar las esquinas no funcionará en Swift 2:

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

Debiera ser

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

Aquí sabrás como podrás hacerlo:

 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;