2018年1月12日金曜日

Layerに描いた図形を全部消す

やりたいこと

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 件のコメント:

コメントを投稿