iOS Swift 3-清除UIView

iOS Swift 3-清除UIView,ios,swift3,Ios,Swift3,我正在构建一个iOS应用程序,其中有一个名为“DrawableCanvas”的类扩展了UIView。这样做的目的是让用户能够在情节提要中利用UIView来扩展我创建的类 这幅画在这一点上画得很好,很流畅。以下是我使用的代码: class DrawableView: UIView { let path=UIBezierPath() var previousPoint:CGPoint var lineWidth:CGFloat=1.0 // Only overri

我正在构建一个iOS应用程序,其中有一个名为“DrawableCanvas”的类扩展了
UIView
。这样做的目的是让用户能够在情节提要中利用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
是我试图重置的视图

这不起作用,因此我尝试在
DrawableView
类中编写一个
reloadData()

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

}

函数被调用了,但也不起作用。如何在iOS Swift 3中清除或重置UIView

问题是,尽管您的问题谈到“重置”,但您的代码实际上并没有重置任何内容。你是说:

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

这就是发生的事情。只要
path
包含一个可绘制的路径,只要视图重新绘制自身,就会在视图中绘制该路径。如果这不是您想要的,请更改
路径
,或更改
绘图
的实现,调用
绘图视图
的(实例的)
路径。removeAllPoints
函数删除所有绘图/路径

因此,按照您的代码,
reset1
现在应该是这样的:

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

将此方法添加到DrawableView类,并使用sig1View实例调用它:

func clear()
{
    path.removeAllPoints()
    setNeedsDisplay()
}
并从重置方法调用它

用法:

sig1View.clear()

你能为view.layers.sublayers{layer.removeFromSuperlayer()}中的层调用
我对绘制路径没有太多经验,但这是我首先要尝试的