2016-10-07 3 views
1

Ich möchte diagonale Linie mit abgerundeten Ecken in Sicht zeichnen. Mein Code:CAShapeLayer Linie abgerundete Ecken

class DiagonalView: UIView { 

// MARK: - Public Properties 

@IBInspectable var fillColor: UIColor = UIColor.white { 
    didSet { 
     self.diagonalLayer.strokeColor = fillColor.cgColor 
     self.redraw() 
    } 
} 

@IBInspectable var lineWidth: CGFloat = 1 { 
    didSet { 
     self.diagonalLayer.lineWidth = lineWidth 
     self.redraw() 
    } 
} 

// MARK: - Private Properties 

private var diagonalLayer: CAShapeLayer = { 
    let layer = CAShapeLayer() 
    layer.fillColor = UIColor.clear.cgColor 
    layer.strokeColor = UIColor.white.cgColor 
    layer.lineCap = kCALineCapRound 
    layer.lineWidth = 1 
    return layer 
}() 

// MARK: - Constructors 

override func awakeFromNib() { 
    super.awakeFromNib() 
    self.layer.addSublayer(self.diagonalLayer) 
    self.setupPath() 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 
    self.setupPath() 
} 

// MARK: - Private methods 

private func redraw() { 
    self.setNeedsDisplay() 
} 

private func setupPath() { 
    let startPoint = CGPoint(x: self.frame.width, y: 0) 
    let endPoint = CGPoint(x: 0, y: self.frame.height) 
    let path = UIBezierPath() 
    path.move(to: startPoint) 
    path.addLine(to: endPoint) 
    path.close() 
    self.diagonalLayer.path = path.cgPath 
} 

} 

Linie Position richtig ist. Aber Ecken sind nicht abgerundet. Ergebnis:

enter image description here

Der Code sieht gut aus, aber ich denke, Chaos etwas ... Irgendwelche Vorschläge?

+0

Ich habe noch nicht versucht, abgerundete Endkappen auf einer Formschicht zu bekommen. Es ist merkwürdig, dass die Formebene einen Linienbegrenzungsstil aufweist, der vom Stil der Linienbegrenzung des Pfads getrennt ist. Was, wenn Sie den Linienbegrenzungsstil auf dem CGPath, das Sie in Ihrer Formebene installieren, auf gerundet einstellen? –

Antwort

3

Ich glaube, ich habe das Problem gefunden. Die Dokumentation sagt:

Der Linienbegrenzungsstil gibt die Form der Endpunkte eines offenen Pfads an, wenn er gestreichelt wird.

Sie schließen Ihren Weg. Lass es offen.

+0

Hehe, vielen Dank! – RomanHouse