Le dessin d'une ligne Swift 3.x avec UIBezierPath
Je suis en train de dessiner une ligne sur une UIView avec un UIBezierpath. Je pense que je vais rater quelque chose, mais n'a pas réussi à la trouver.
Voici mon code:
//Code for touch recognition
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
swiped = false
if let touch = touches.first as? UITouch? {
lastPoint = (touch?.location(in: fullview))!
//print(lastPoint)
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
swiped = true
if let touch = touches.first as? UITouch? {
let currentPoint = touch?.location(in: fullview)
drawLineFrom(fromPoint: lastPoint, toPoint: currentPoint!)
lastPoint = currentPoint!
//print(lastPoint)
//print("touch moved")
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if !swiped {
drawLineFrom(fromPoint: lastPoint, toPoint: lastPoint)
}
//print("touch ended")
}
//code for drawing
func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint){
UIGraphicsBeginImageContext(fullview.frame.size)
let context = UIGraphicsGetCurrentContext()
let aPath = UIBezierPath()
//aPath.move(to: fromPoint)
//aPath.addLine(to: toPoint)
aPath.lineWidth=10.0
aPath.lineJoinStyle = .round
aPath.move(to: CGPoint(x:15,y:15))
aPath.addLine(to: CGPoint(x:80,y:80))
aPath.addClip()
aPath.close()
UIColor.green.set()
aPath.stroke()
//print("drawline")
//print("Frompoint = ",fromPoint)
//print("topoint = ",toPoint)
/* context?.setLineCap(.round)
context?.setLineWidth(brushWidth)
context?.setStrokeColor(red: red, green: green, blue: blue, alpha: 1.0)
context?.setBlendMode(.normal)
context?.beginPath()
context?.move(to: fromPoint)
context?.addLine(to: toPoint)
context?.closePath()
context?.strokePath()*/
//let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
fullview.setNeedsDisplay()
}
Comme vous pouvez le voir, j'ai essayé aussi avec le contexte, mais ça ne marchait pas trop.
- Cochez cette
- Google est mon ami 🙂 je viens de regarder pour le mal des mots-clés, thx
- Il est en fait votre titre exact 🙂
- Double Possible de Dessiner une ligne avec UIBezierPath
Vous devez vous connecter pour publier un commentaire.
Je l'utilise pour dessiner une ligne:
Espère que cela vous aider. C'est juste un chemin à tracer une ligne de swift.
Bien, vous êtes dessin dans une image contexte (un écran bitmap), pas dans la vue. C'est très probablement pas ce que vous voulez? Assurez-vous que vous avez lu iOS Dessin Concepts.
Votre
UIView
sous-classe doit probablement juste de suivre la position de la touche (comme dans unvar touchedPositions = [CGPoint]()
) et d'appelersetNeedsDisplay()
.Puis mettre en œuvre le
func draw(_ rect: CGRect)
méthode dans votre sous-classe. Dans cette méthode, créer votre chemin et de le faire selon les positions que vous avez suivi (w/o la création d'un nouveau contexte).