やりたいこと
UIViewのLayerに描いたドロー図形を全部クリアしたい。
やり方
Layerをインスタンス変数として持っておき、それをremoveFromSuperLayer()してやればいい。
let shapeLayer = CAShapeLayer()
func drawFigure() -> Void {
let path = UIBezierPath()
path.move(to: CGPoint(x: 384, y: 512))
path.addLine(to: CGPoint(x: 600, y: 600))
path.addLine(to: CGPoint(x: 600, y: 200))
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.fillColor = UIColor.blue.cgColor
shapeLayer.path = path.cgPath
self.view.layer.addSublayer(shapeLayer)
}
@IBAction func deleteFigure(_ sender: Any) {
self.shapeLayer.removeFromSuperlayer()
}
注意点
インスタンス変数として持っておくところが肝。単に
self.view.layer.removeFromSuperlayer()
とやると関係ないLayerがなくなっちゃうから画面が真っ黒になっちゃう。
viewのどのLayerを削除するのか指示するために必要なのだな。
もしかしたら変数として持ってなくても消せるやり方あるのか知らんけどさ。
0 件のコメント:
コメントを投稿