Je construis une application iOS où j'ai une classe nommée "DrawableCanvas" qui s'étend UIView
. L'idée est de permettre aux utilisateurs de dessiner sur UIViews dans le Storyboard qui étendent la classe que j'ai faite.iOS Swift 3 - Effacer l'UIView
Le dessin fonctionne bien et est lisse à ce stade. Voici le code je:
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)
}
}
Bien sûr, je dois dégager la vue sur une presse de bouton, et voici mon bouton action presse:
@IBAction func reset1(_ sender: AnyObject) {
print("reset hit!")
sig1View.setNeedsLayout()
sig1View.setNeedsDisplay()
}
où sig1View
est l'opinion que je suis en train réinitialiser.
Cela n'a pas fonctionné, alors que j'ai essayé au lieu d'écrire un était reloadData()
dans la classe DrawableView
:
func reloadData() {
print("reload data hit")
self.setNeedsDisplay()
}
La fonction été appelé, mais aussi, ne fonctionne pas. Comment effacer ou réinitialiser un UIView dans iOS Swift 3? Et le plomb et l'aide sont très appréciés.
Pourriez-vous faire un appel à 'pour la couche dans view.layers.sublayers {layer.removeFromSuperlayer()}' Je n'ai pas beaucoup d'expérience avec des chemins de dessin, mais c'est ce que je j'essaierais d'abord –