ios swift uibezierpath

ios - Dibuja una línea con UIBezierPath



swift (4)

Es la primera vez que utiliza BezierPaths, preguntándose cómo se supone que se implementará realmente esta función. Actualmente, la ruta de Bezier se mueve dentro del marco de la imagen, en lugar de dibujar en la pantalla.

Hay una mejor manera de hacerlo?

func drawLineFromPoint(start : CGPoint, toPoint end:CGPoint, ofColor lineColor: UIColor, inView view:UIView) { var maxWidth = abs(start.x - end.x) var maxHeight = abs(start.y - end.y) var contextSize : CGSize! if maxWidth == 0 { contextSize = CGSize(width: 1, height: maxHeight) }else { contextSize = CGSize(width: maxWidth, height: 1) } //design the path UIGraphicsBeginImageContextWithOptions(contextSize, false, 0) var path = UIBezierPath() path.lineWidth = 1.0 lineColor.set() //draw the path and make visible path.moveToPoint(start) path.addLineToPoint(end) path.stroke() //create image from path and add to subview var image = UIGraphicsGetImageFromCurrentImageContext() var imageView = UIImageView(image: image) view.addSubview(imageView) UIGraphicsEndImageContext() }


Acabé haciéndolo de esta manera:

func drawLineFromPoint(start : CGPoint, toPoint end:CGPoint, ofColor lineColor: UIColor, inView view:UIView) { //design the path var path = UIBezierPath() path.moveToPoint(start) path.addLineToPoint(end) //design path in layer var shapeLayer = CAShapeLayer() shapeLayer.path = path.CGPath shapeLayer.strokeColor = lineColor.CGColor shapeLayer.lineWidth = 1.0 view.layer.addSublayer(shapeLayer) }


Para dibujar una línea horizontal en la parte superior:

let path = UIBezierPath() path.moveToPoint(CGPoint(x: 0, y: 0)) path.addLineToPoint(CGPoint(x: yourView.frame.width, y: 0)) let shapeLayer = CAShapeLayer() shapeLayer.path = path.CGPath shapeLayer.strokeColor = UIColor.lightGrayColor().CGColor shapeLayer.lineWidth = 0.5 yourView.layer.addSublayer(shapeLayer)

Para dibujar una línea horizontal en la parte inferior:

let path = UIBezierPath() path.moveToPoint(CGPoint(x: 0, y: yourView.frame.height)) path.addLineToPoint(CGPoint(x: yourView.frame.width, y: yourView.frame.height)) let shapeLayer = CAShapeLayer() shapeLayer.path = path.CGPath shapeLayer.strokeColor = UIColor.lightGrayColor().CGColor shapeLayer.lineWidth = 0.5 yourView.layer.addSublayer(shapeLayer)


Swift 4

func drawLineFromPoint(start : CGPoint, toPoint end:CGPoint, ofColor lineColor: UIColor, inView view:UIView) { //design the path let path = UIBezierPath() path.move(to: start) path.addLine(to: end) //design path in layer let shapeLayer = CAShapeLayer() shapeLayer.path = path.cgPath shapeLayer.strokeColor = lineColor.cgColor shapeLayer.lineWidth = 1.0 view.layer.addSublayer(shapeLayer) }


Versión Swift 3.1 de la Respuesta de William Falcon + Mejorada

Esta es solo una versión actualizada de la respuesta ya aceptada, y le agregué un poco más.

func drawLineFromPointToPoint(startX: Int, toEndingX endX: Int, startingY startY: Int, toEndingY endY: Int, ofColor lineColor: UIColor, widthOfLine lineWidth: CGFloat, inView view: UIView) { let path = UIBezierPath() path.move(to: CGPoint(x: startX, y: startY)) path.addLine(to: CGPoint(x: endX, y: endY)) let shapeLayer = CAShapeLayer() shapeLayer.path = path.cgPath shapeLayer.strokeColor = lineColor.cgColor shapeLayer.lineWidth = lineWidth view.layer.addSublayer(shapeLayer) }

Y por supuesto la implementación sería

drawLineFromPointToPoint(startX: Int, toEndingX: Int, startingY: Int, toEndingY: Int, ofColor: UIColor, widthOfLine: CGFloat, inView: UIView)

Lo que cambié de respuesta aceptada

Cambié las variables vars a let, e hice más fácil ingresar el inicio y el final tanto de la x como de la y. También permito al usuario cambiar el ancho de la línea.

Elegí que los valores sean del tipo Int, pero puede cambiarlos para que sean las otras opciones permitidas.