ここでグーグルの時間を節約するため、clearsContextBeforeDrawing
はがdrawRectに追加されたレイヤーもクリアすると誤って考えました。それはしません。drawRectシェイプレイヤー描画の描画を消去する
もちろん、Mattが説明したように、drawRectで通常の方法だけを描画してから、clearsContextBeforeDrawing
が正しく動作するはずです。たとえば、
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()
}
ここで貧しい人々の方法は、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)
}
に描画するしかし、どのように描画する前にクリアするためには?
設定clearsContextBeforeDrawing
は何もしません。
私はクリアすることができます唯一の方法は、すべての層を除去することである:
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() }
}
}
...
}
は「層」の描画をクリアするためのより良い方法はありますか?
これはあまりにも開いた質問です。あなたの全体的な目標が何であるかという考えはありません。 – matt
とにかく私は完全にそれを得る - 素晴らしい。もちろん、私は現在の状況に取り組んでいたはずです。そして、本当に 'clearsContextBeforeDrawing'はうまくいきます - よろしく!だから私の混乱は、あなたが私が意味するものを見れば、 'clearsContextBeforeDrawing'も"レイヤーをクリア "すると思ったということでした。あなたは私をまっすぐにセットしました:) Nice ... – Fattie