2017-02-07 3 views
0

Ich habe andere Stackoverflow-Threads verfolgt und CAShapeLayer erstellt und der Button-Ebene hinzugefügt.Wie bekommt man abgerundete Ecken nur für obere linke und untere linke Ecken?

let bazierPath = UIBezierPath.init(roundedRect: button.bounds, byRoundingCorners: [UIRectCorner.bottomLeft, UIRectCorner.topLeft], cornerRadii: CGSize(width: 10.0, height: 10.0)) 
      let shapeLayer = CAShapeLayer() 
      shapeLayer.frame = button.bounds 
      shapeLayer.path = bazierPath.cgPath 
      shapeLayer.strokeColor = UIColor.green.cgColor 
      shapeLayer.lineWidth = 1.0 
      button.layer.mask = shapeLayer 

aber das Problem ist, dass ich mit klaren Farben Ecken bekomme, aber ich will, dass sie grün sind. Suchen Sie im folgenden Bild nach Schaltflächen mit "Mon" und "Fr", um das Problem besser zu verstehen.

enter image description here

+0

prüfen dies: http://stackoverflow.com/questions/37163850/round-top-corners-of-a-uibutton-in-swift – Khuong

Antwort

1

Versuchen Sie, die folgende Funktion zu verwenden, :

fun createRoundCorners(corners:UIRectCorner, radius: CGFloat) 
    { 
    let borderLayer = CAShapeLayer() 
    borderLayer.frame = self.layer.bounds 
    borderLayer.strokeColor = // Add your color 
    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); 
    } 
+0

Lösung 1 Ich habe bereits versucht und gescheitert. aber Lösung 2 funktioniert. Es ist brilliant. Danke –

+0

ok lass mich 1 löschen. – User511

2

in Ihrem Code vergessen haben, die addSublayer zur Hauptschicht contentView.layer.addSublayer(subLayer) für Probe

Zweck
let contentView = UIView(frame: CGRect(x: CGFloat(50), y: CGFloat(100), width: CGFloat(200), height: CGFloat(100))) 
    self.view.addSubview(contentView) 
    let subLayer = CAShapeLayer() 
    subLayer.fillColor = UIColor.blue.cgColor 
    subLayer.strokeColor = UIColor.green.cgColor 
    subLayer.lineWidth = 1.0 
    subLayer.path = UIBezierPath(roundedRect: contentView.bounds, byRoundingCorners: [UIRectCorner.bottomLeft, UIRectCorner.topLeft], cornerRadii: CGSize(width: 10.0, height: 10.0)).cgPath 
    contentView.layer.addSublayer(subLayer) 

Ausgang

enter image description here

+0

kann ich kenne den Grund –

+0

downvote ich es nicht downvoted . Ich habe einfach aufgegeben. das Hinzufügen von Formebene als Sublayer hilft tatsächlich. danke –

+0

Mit Blick auf die Versionen Ihrer Antwort war die erste Version falsch. Vielleicht wurde diese Version gewählt? – vikingosegundo