繁体   English   中英

iOS Swift 3-清除UIView

[英]iOS Swift 3 - Clearing the UIView

我正在构建一个iOS应用,其中有一个名为“ DrawableCanvas”的类,该类扩展了UIView 这个想法是使用户能够在Storyboard中使用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包含可绘制的路径,那么只要视图重新绘制自身,该视图便会在您的视图中绘制。 如果这不是您想要的,请更改path或更改draw的实现。

调用DrawableView的(实例的) path.removeAllPoints函数以删除所有图形/路径。

因此,按照您的代码, reset1现在应如下所示:

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

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

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

并从reset方法调用它。

用法:

sig1View.clear()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM