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:
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:
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