Um Zeit für jeden zu googeln hier zu sparen, dachte ich falsch, dass clearsContextBeforeDrawing
würde auch löschen alle Schichten in DrawRect hinzugefügt. Es tut nicht.Um Zeichnung in drawRect shape-layer Zeichnung zu löschen
Natürlich, wie Matt erklärt hat, sollten Sie sicherlich nur den gewöhnlichen Weg in drawRect zeichnen, und dann funktioniert clearsContextBeforeDrawing
korrekt. Beispiel
override func drawRect(rect: CGRect)
{
// clearsContextBeforeDrawing works perfectly here as normal
// don't add any layers in here :)
let dotPath = UIBezierPath(ovalInRect:rect)
mainColor.setFill()
dotPath.fill()
let ins:CGFloat = (ringThickness/2)
let circlePath = UIBezierPath(ovalInRect: CGRectInset(rect,ins,ins))
circlePath.lineWidth = ringThickness
ringColor.setStroke()
circlePath.stroke()
}
Hier ist ein schlechter Weg in drawRect
override func drawRect(rect: CGRect)
{
let circlePath = UIBezierPath(ovalInRect:rect)
let circle = CAShapeLayer()
circle.path = circlePath.CGPath
circle.fillColor = someColor.CGColor
layer.addSublayer(circle)
... and a few more layers like ...
blah.fillColor = someColor.CGColor
layer.addSublayer(blah)
}
zu ziehen Aber wie vor dem Zeichnen löschen?
Einstellung clearsContextBeforeDrawing
tut nichts.
Der einzige Weg, ich löschen kann, ist durch alle Schichten zu entfernen:
override func drawRect(rect: CGRect)
{
// first remove all layers...
if let sublayers = layer.sublayers {
for layer in sublayers {
if layer.isKindOfClass(CAShapeLayer) //(essential)
{ layer.removeFromSuperlayer() }
}
}
...
}
Gibt es einen besseren Weg, um die „Schicht“ löschen zeichnen?
Das ist eine viel zu offene Frage. Ich habe keine Ahnung, was Ihr Gesamtziel ist. – matt
Egal, ich verstehe es total - super. Natürlich hätte ich mich dem aktuellen Kontext anschließen müssen. Und dann funktioniert 'clearsContextBeforeDrawing' tatsächlich - yay! So war meine Verwirrung, dass ich dachte, dass "clearContextBeforeDrawing" auch "Ebenen löschen" würde, wenn Sie sehen, was ich meine. Du hast mich richtig gestellt :) Schön ... – Fattie