iOS Swift 3-清除UIView
我正在构建一个iOS应用程序,其中有一个名为“DrawableCanvas”的类扩展了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
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()}中的层调用
吗
我对绘制路径没有太多经验,但这是我首先要尝试的