現在、私はMKMapViewで自分の位置を追跡しています。私の目的は、追跡された場所から作成されたMKPolylineと同じベジェパスを描くことです。UIViewでMKPolylineと同じUIBezierPathを描画する方法
私が試みたことは次のとおりです。すべての位置座標をCLLocation配列に格納する。その配列を繰り返し、CLLocationCoordinate2D配列にlat/lng座標を格納します。次に、ポリラインが画面のビューにあることを確認して、CGPoints内のすべての位置座標を変換します。
現在の試行:
@IBOutlet weak var bezierPathView: UIView!
var locations = [CLLocation]() // values from didUpdateLocation(_:)
func createBezierPath() {
bezierPathView.isHidden = false
var coordinates = [CLLocationCoordinate2D]()
for location in locations {
coordinates.append(location.coordinate)
}
let polyline = MKPolyline(coordinates: coordinates, count: coordinates.count)
fitPolylineInView(polyline: polyline)
let mapPoints = polyline.points()
var points = [CGPoint]()
for point in 0...polyline.pointCount
{
let coordinate = MKCoordinateForMapPoint(mapPoints[point])
points.append(mapView.convert(coordinate, toPointTo: polylineView))
}
print(points)
let path = UIBezierPath(points: points)
path.lineWidth = 2.0
path.lineJoinStyle = .round
let layer = CAShapeLayer(path: path, lineColor: UIColor.red, fillColor: UIColor.black)
bezierPathView.layer.addSublayer(layer)
}
extension UIBezierPath {
convenience init(points:[CGPoint])
{
self.init()
//connect every points by line.
//the first point is start point
for (index,aPoint) in points.enumerated()
{
if index == 0 {
self.move(to: aPoint)
}
else {
self.addLine(to: aPoint)
}
}
}
}
extension CAShapeLayer
{
convenience init(path:UIBezierPath, lineColor:UIColor, fillColor:UIColor)
{
self.init()
self.path = path.cgPath
self.strokeColor = lineColor.cgColor
self.fillColor = fillColor.cgColor
self.lineWidth = path.lineWidth
self.opacity = 1
self.frame = path.bounds
}
}
私は変換(_ :)メソッド)彼らが正しいか(わからないから保存されたコンソールにポイントを出力することができるしています。しかし、bezierPathViewには出力がありません。空白の背景ビューコントローラーになります。
あなたは、おそらくあなたは、GPSからの変換方法を示す必要がある座標のUIViewに調整します。 – MirekE
@MirekE調整済みです!私はCLLocationManagerDelegateメソッドdidUpdateLocationsから座標を取得しています。私はMKPolylineを正常に作成することができました。私は、ポリラインと同じUIBezierPathを作成する方法を知らないので、UIViewまたはいくつかのオブジェクトをパスを表すために配置できます。 – lifewithelliott
MKPolylineをイメージとしてキャプチャします。http://stackoverflow.com/questions/4334233/how-to-capture-uiview-to-uiimage-with-loss-of-quality-on-retina-display –