Ich habe ein Design-Element, das ich habe Probleme herauszufinden; Ich hoffe, dass jemand mich in die richtige Richtung weisen kann. Das Element, das ich zu bauen versuche, ist so;Zeichnen abgerundete Ecken mit UIBezierPath
effektiv, es ist ein Rechteck mit abgerundeten Ecken mit einem Schlag auf der linken, oberen und rechten Seite (der Boden soll keinen Schlaganfall).
Ich habe versucht, den folgenden Code zu verwenden;
// Create the rounded rectangle
let maskPath = UIBezierPath(roundedRect: myView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 4.0, height: 4.0))
// Setup a shape layer
let shape = CAShapeLayer()
// Create the shape path
shape.path = maskPath.cgPath
// Apply the mask
myView.layer.mask = shape
Anschließend verwende ich Folgendes, um den Strich um das Rect zu zeichnen;
// Add border
let borderLayer = CAShapeLayer()
borderLayer.path = maskPath.cgPath
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.strokeColor = UIColor.white.cgColor
borderLayer.lineWidth = 2.0
borderLayer.frame = self.bounds
self.layer.addSublayer(borderLayer)
Dies ergibt das folgende Bild;
Ich habe nicht in der Lage, herauszufinden, wie entweder den unteren Hub entfernen oder das Element zeichnen ein UIBezierPath(), wobei aber die Ecken in einer Weise gerundet, die identisch sind zu der abgerundeten rect (ich benutze eine andere abgerundete rect in der gleichen Ansicht für einen anderen Zweck, und die abgerundeten Ecken müssten identisch sein).
Danke!
Das funktionierte perfekt! Danke, @matt! Ich habe diesen Weg zu sehr überkompliziert; Ich wusste nicht, dass ich mit einem '.clear' Blend-Modus streichen konnte. Macht jetzt Sinn! – ZbadhabitZ
Es gibt eine andere Möglichkeit, vor dem Zeichnen der abgerundeten Rect zu klammern. Vielleicht hätte ich das auch zeigen sollen. – matt
Code hinzugefügt, um den zweiten Weg, Clipping, zu demonstrieren.Ich mag es tatsächlich, in diesem Fall besser zu schneiden; es ist einfacher zu kontrollieren. – matt