2017-05-01 3 views
0

Ich habe eine Ansicht, die ich mehrere abgerundete Ecken einstellen möchte. Es ist ein normales Quadrat UIView.Mehrere abgerundete Ecken in Sicht

Und ich bin diese Funktion aufrufen, die eine Verlängerung ist:

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 
} 

Mit folgendem:

myView.roundCorners(.bottomLeft, radius: 20) 
myView.roundCorners(.bottomRight, radius: 20) 

Aber nur bottom abgerundet wird, werden alle Hinweise, warum?

Antwort

2

Der Parameter UIRectCorner ist eine Struktur, die dem OptionSet-Protokoll entspricht, mit dem mehrere Elemente des Sets übergeben werden können. Jedes Mal, wenn Sie diese Methode mit einer anderen roundCorners-Maske aufrufen, wird das vorherige Layout überschrieben.

Sie müssen dies tun, wenn Sie mehrere abgerundete Ecken für Ihre Ansicht wollen:

myView.roundCorners([.bottomLeft, .bottomRight], radius: 20) 
0

Wie Rashwan L die oben UIRectCorner eine Reihe von Optionen nimmt. Was passiert ist, als Sie wirklich die Methode aufgerufen haben, wird die Maske überschrieben. Auch bei dem Verfahren nach dem Maske self.layer.maskToBounds = true Einstellung und vor Selbstanruf ändern: self.layoutIfNeeded() Es bereitet Ihre Ansichten richtig gezeichnet werden.