Coins arrondis d'un UIButton dans Swift

Je sais que je peux arrondir les quatre coins en utilisant:

myBtn.layer.cornerRadius = 8 myBtn.layer.masksToBounds = true 

Puisque je veux seulement en arrondir deux, j'ai fait des searchs et j'ai trouvé ceci :

 extension UIView { func roundCorners(corners:UIRectCorner, radius: CGFloat) { 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 } } 

Ce qui s'appelle comme ceci:

 view.roundCorners([.TopLeft , .TopRight], radius: 10) 

Pourtant, cela ne fonctionne pas pour un UIButton. Lorsque je change l'extension pour être de type UIButton et lui passe un button, la sortie ressemble à ceci:

entrez la description de l'image ici

La question est, comment puis-je adapter cela pour travailler sur un UIButton?

    Ajout de l'extension d'UIButton:

     extension UIButton{ func roundedButton(){ let maskPAth1 = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: [.TopLeft , .TopRight], cornerRadii:CGSizeMake(8.0, 8.0)) let maskLayer1 = CAShapeLayer() maskLayer1.frame = self.bounds maskLayer1.path = maskPAth1.CGPath self.layer.mask = maskLayer1 } } 

    Appel dans viewDidAppear / viewDidLayoutSubvies:

     btnCorner.roundedButton() 

    Bouton de sortie OutPut:

    entrez la description de l'image ici

    Pour swift 3, la réponse de Kirit Modi est changée en:

     extension UIButton { func roundedButton(){ let maskPAth1 = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: [.topLeft , .topRight], cornerRadii:CGSize(width:8.0, height:8.0)) let maskLayer1 = CAShapeLayer() maskLayer1.frame = self.bounds maskLayer1.path = maskPAth1.cgPath self.layer.mask = maskLayer1 } } 

    Au début du file de l'extension, n'oubliez pas d'append:

     import UIKit 

    Si vous voulez une extension pour un UIView avec l'option d'arrondir les coins supérieurs ou inférieurs, vous pouvez utiliser:

     extension UIView { func roundedCorners(top: Bool){ let corners:UIRectCorner = (top ? [.topLeft , .topRight] : [.bottomRight , .bottomLeft]) let maskPAth1 = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii:CGSize(width:8.0, height:8.0)) let maskLayer1 = CAShapeLayer() maskLayer1.frame = self.bounds maskLayer1.path = maskPAth1.cgPath self.layer.mask = maskLayer1 } } 

    Quel est appelé pour un button comme:

     myButton.roundedCorners(top: true) 

    Mettez à jour votre extension pour être comme ceci:

     extension UIView { func roundCorners(corners:UIRectCorner, radius: CGFloat) { let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) let mask = CAShapeLayer() var rect = self.bounds maskLayer.frame = rect mask.path = path.CGPath self.layer.mask = mask } } 

    La couche de forme (masque) doit connaître le cadre

    Vous avez oublié de définir le cadre de votre calque de forme:

     mask.frame = layer.bounds 

    Utilisez ce code,

     let path = UIBezierPath(roundedRect:viewTo.bounds, byRoundingCorners:[.TopRight, .TopLeft], cornerRadii: CGSizeMake(20, 20)) let maskLayer = CAShapeLayer() maskLayer.path = path.CGPath viewTo.layer.mask = maskLayer 

    espérons que c'est utile