[英]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.