2017-11-11 20 views
0

我计算2点之间的距离。对于第一点,我分配了纬度和经度。第二个坐标点在用户点击地图的任何位置进行协调。每件事情都很完美,除了四次打印的答案。斯威夫特:地图返回4个值作为2点之间的距离,为什么?

  • 我试着返回第一个索引(原来第一个索引是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 
    } 
}