2017-06-16 2 views
1

Ich muss eine Gerade zeichnen, beginnend bei 0,0 mit etwas Länge und Winkel (von der Spitze der Ansicht). Derzeit kann ich eine Linie erstellen, indem ich Anfangs- und Endpunkte gebe, aber anstelle von Endpunkten, muss ich Winkel und Länge verwenden, jede Hilfe? HierWie zeichne ich eine Gerade mit der gegebenen Länge und Winkel?

ist der Code:

let path = UIBezierPath() 
path.move(to: CGPoint(x: 0, y: 0)) 
path.addLine(to: CGPoint(x: 0+10, y: 0+10)) 

let shapeLayer = CAShapeLayer() 
shapeLayer.path = path.cgPath 
shapeLayer.strokeColor = UIColor.blue.cgColor 
shapeLayer.lineWidth = 3.0 

Antwort

2

Es gibt viele Möglichkeiten, dies zu tun. Eine Möglichkeit besteht darin, mit einer Einheitslängenlinie entlang der Y-Achse zu beginnen. Drehen Sie die Linie in den gewünschten Winkel und skalieren Sie sie auf die gewünschte Länge. Beispiel:

let angleInRadians: CGFloat = ... 
let length: CGFloat = ... 
let path = UIBezierPath() 
path.move(to: .zero) 
path.addLine(to: CGPoint(x: 0, y: 1)) 
path.apply(.init(rotationAngle: angleInRadians)) 
path.apply(.init(scaleX: length, y: length)) 

Ein anderer Weg ist trigonometrische Funktionen zu verwenden, um direkt den nicht-origin Endpunkt der Linie zu berechnen:

let angleInRadians: CGFloat = ... 
let length: CGFloat = ... 
let path = UIBezierPath() 
path.move(to: .zero) 
path.addLine(to: CGPoint(x: -sin(angleInRadians) * length, cos(angleInRadians) * length)) 
Verwandte Themen