2017-11-11 12 views
0

私は2点間の距離を計算しています。最初の点については、私は緯度とlongtiudeを割り当てています。 2番目のポイントは、ユーザーがマップをクリックするたびに座標を設定します。答えは4回印刷される以外はすべて完璧に動作します。Swift:Mapは2つの点間の距離として4つの値を返します。なぜですか?

  • 最初のインデックスを返そうとしました(最初のインデックスは4 の値でした)。
  • これらの値をセットに追加して、繰り返したものを削除しようとしましたが、それは機能しませんでした。
  • 私はループを作ろうとしましたが、最初からやり直しました(まだ4つの値を返します)。ここで 私は(viewdidAppear内部の)ユーザーのクリックのための注釈を作成しています:、

let uilpgr = UILongPressGestureRecognizer(target: self, action: #selector(MapViewController.longpress(gestureRecognizer:))) 
     uilpgr.minimumPressDuration = 2 
     map.addGestureRecognizer(uilpgr) 

そして、これは、(機能viewdidAppear後)までの距離を計算する関数です:

@objc func longpress(gestureRecognizer: UIGestureRecognizer){ 
    let touchPoint = gestureRecognizer.location(in: self.map) 
    let coordinates = map.convert(touchPoint, toCoordinateFrom: self.map) 
    let annotation = MKPointAnnotation() 
    annotation.coordinate = coordinates 
    annotation.title = "Destination" 
    map.addAnnotation(annotation) 

    let source = CLLocation(latitude: 5, longitude: 5) 

    let distination = CLLocation(latitude: coordinates.latitude, longitude: coordinates.longitude) 

    let distanceInMeters = source.distance(from: distination) 
    let distanceInMiles = String(Int(distanceInMeters/1.6)) 

    myArrayDataStructure.myArray.append(distanceInMiles) 
    UserDefaults.standard.set(myArrayDataStructure.myArray, forKey: "items") 
} 

答えて

1

あなたの問題は、ジェスチャーをどのように扱うかです。 「長いプレス」ジェスチャー(他のものと同じように)にはいくつかの状態があります。ジェスチャアクションは、ジェスチャが開始されるとき、終了するとき、取り消されるとき、ジェスチャが更新されるときに「長押し」のときに呼び出されます。

距離計算は、ジェスチャの状態が「終了」の場合にのみ実行します。

@objc func longpress(gestureRecognizer: UIGestureRecognizer){ 
    if gestureRecognizer.state = .ended { 
     // your code here 
    } 
} 
関連する問題