2017-10-09 30 views
-1

UIViewという名前の "DrawableCanvas"というクラスがあるiOSアプリケーションをビルドします。このアイデアは、ユーザがストーリーボードのUIViewを描画して、自分が作成したクラスを拡張できるようにすることです。iOS Swift 3 - UIViewのクリア

この時点で、図面は細かく滑らかに動作します。ここで私が使用したコードだ:もちろん

class DrawableView: UIView { 

    let path=UIBezierPath() 
    var previousPoint:CGPoint 
    var lineWidth:CGFloat=1.0 

    // Only override drawRect: if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    override init(frame: CGRect) { 
     previousPoint=CGPoint.zero 
     super.init(frame: frame) 

    } 

    required init?(coder aDecoder: NSCoder) { 
     previousPoint=CGPoint.zero 
     super.init(coder: aDecoder) 

     let panGestureRecognizer=UIPanGestureRecognizer(target: self, action: #selector(pan)) 
     panGestureRecognizer.maximumNumberOfTouches=1 

     self.addGestureRecognizer(panGestureRecognizer) 

    } 

    override func draw(_ rect: CGRect) { 
     // Drawing code 
     UIColor.black.setStroke() 
     path.stroke() 
     path.lineWidth=lineWidth 
    } 

    func pan(panGestureRecognizer:UIPanGestureRecognizer)->Void{ 
     let currentPoint=panGestureRecognizer.location(in: self) 
     let midPoint=self.midPoint(p0: previousPoint, p1: currentPoint) 


     if panGestureRecognizer.state == .began{ 
      path.move(to: currentPoint) 
     } 
     else if panGestureRecognizer.state == .changed{ 
      path.addQuadCurve(to: midPoint,controlPoint: previousPoint) 
     } 

     previousPoint=currentPoint 
     self.setNeedsDisplay() 
    } 

    func midPoint(p0:CGPoint, p1:CGPoint)->CGPoint{ 
     let x=(p0.x+p1.x)/2 
     let y=(p0.y+p1.y)/2 
     return CGPoint(x: x, y: y) 
    } 
} 

、私はボタンを押す上のビューをクリアする必要があり、そしてここに私のボタン押下アクションです:

@IBAction func reset1(_ sender: AnyObject) { 
    print("reset hit!") 
    sig1View.setNeedsLayout() 
    sig1View.setNeedsDisplay() 
} 

sig1Viewは私がしようとしているビューがありますリセットする。

func reloadData() { 
    print("reload data hit") 
    self.setNeedsDisplay() 

} 

関数が呼ばれましたが、それはあまりにも、動作しませんでした:

この

は私が代わりにしようとした DrawableViewクラスで reloadData()を書くことだったので、何を、うまくいきませんでした。

iOS Swift 3でUIViewをクリアまたはリセットするにはどうすればよいですか?そして鉛と助けは非常に高く評価されます。

+0

あなたはview.layers.sublayersに層のための 'への呼び出しを行うでした{layer.removeFromSuperlayer()}'私は、描画パスを持つ多くの経験を持っていないが、それはどのような私です最初に試してみる –

答えて

1

DrawableView(インスタンス)のpath.removeAllPoints関数を呼び出して、すべての図面/パスを削除してください。

だからあなたのコード以下、reset1は次のようになります。

@IBAction func reset1(_ sender: AnyObject) { 
    print("reset hit!") 
    sig1View.path.removeAllPoints() 
    sig1View.setNeedsDisplay() 
} 
0

問題は、「リセット」に関するご質問会談、あなたのコードは、実際には何もリセットされませんが、ということです。あなたは言っている:

override func draw(_ rect: CGRect) { 
    // Drawing code 
    UIColor.black.setStroke() 
    path.stroke() 
    path.lineWidth=lineWidth 
} 

それは起こっていることです。 pathに描画可能なパスが含まれている限り、ビューが再描画されるたびにビューに描画されます。それがあなたの望むものでない場合は、pathを変更するか、drawの実装を変更してください。

0

はDrawableViewクラスにこのメソッドを追加し、sig1Viewインスタンスとそれを呼び出す:

func clear() 
{ 
    path.removeAllPoints() 
    setNeedsDisplay() 
} 

とリセット方法からそれを呼び出します。

使用法:

sig1View.clear() 
関連する問題