2016-12-14 4 views
2

Je suis nouveau à rapide, je veux tracer une ligne entre 2 points sur une image que j'ai appelé mapView, j'ai essayé d'utiliser CGContext mais n'a obtenu aucun résultat, aucune idée pour aider? Merci.Comment dessiner une ligne entre deux points sur une image dans swift 3?

UIGraphicsBeginImageContext(mapView.bounds.size) 
    let context : CGContext = UIGraphicsGetCurrentContext()! 
    context.addLines(between: [CGPoint(x:oldX,y:oldY), CGPoint(x:newX, y:newY)]) 
    context.setStrokeColorSpace(CGColorSpaceCreateDeviceRGB()) 
    context.setStrokeColor(UIColor.blue.cgColor.components!) 
    context.setLineWidth(3) 
    mapView?.image?.draw(at: CGPoint(x:0, y:0)) 
    context.strokePath() 
    mapView.image = UIGraphicsGetImageFromCurrentImageContext()! 
    UIGraphicsEndImageContext() 
+0

Vous cherchez peut-être POLYLIGNE –

+0

Comme @Dev_Tandel dit, vous utilisez google maps et que vous voulez dessiner une polyligne ou tout simplement vous voulez tracer une ligne entre deux points n'importe quel UIImage. –

Répondre

3

Une option consiste à ajouter une vue sous à votre vue de l'image et ajoutez le code de dessin de ligne dans sa méthode draw(_ rect: CGRect).

Une aire de jeux exemple la mise en œuvre:

class LineView : UIView { 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
     self.backgroundColor = UIColor.init(white: 0.0, alpha: 0.0) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func draw(_ rect: CGRect) { 
     if let context = UIGraphicsGetCurrentContext() { 
      context.setStrokeColor(UIColor.blue.cgColor) 
      context.setLineWidth(3) 
      context.beginPath() 
      context.move(to: CGPoint(x: 5.0, y: 5.0)) // This would be oldX, oldY 
      context.addLine(to: CGPoint(x: 50.0, y: 50.0)) // This would be newX, newY 
      context.strokePath() 
     } 
    } 
} 


let imageView = UIImageView(image: #imageLiteral(resourceName: "image.png")) // This would be your mapView, here I am just using a random image 
let lineView = LineView(frame: imageView.frame) 
imageView.addSubview(lineView) 
+0

Merci pour votre aide, c'est fait. J'ai d'autres questions s'il vous plaît: comment puis-je supprimer ces lignes de l'image? essayé removeFromSuperView mais j'ai autre vue sur l'image avec je ne veux pas le supprimer, merci –

+0

pour que vous puissiez utiliser 'lineView.removeFromSuperview()', l'autre option est de contrôler la fonction draw dans le LineView pour afficher seulement ce que tu veux. –

+0

Merci beaucoup, j'ai essayé de le rendre dynamique en envoyant des points mais je ne peux pas, s'il vous plaît comment le rendre dynamique? –