Swift如何构建路线FROM地图项,我在搜索栏中定义了它



如果主题不那么准确,很抱歉。我正在尝试构建一个从一个点到另一个点的地图路线,关键是这两个点都是由用户定义的。因此,我想从接口生成器传递一个源mapItem和目标mapItem,并在它们之间进行路由。

我做了什么:我有一个建议表视图控制器,当在搜索栏中键入内容时,它会为搜索表视图控制器建议位置;则搜索TVC将具有名称和地址的地图注释传递到结果地图视图。在我的结果图视图中,我有两个按钮:Source和Destination。因此,当从搜索TVC传递地址时,mapView建议按下两个按钮。如果Destination按钮被按下,那么这意味着源地图项目为零,并且它构建了从我的当前位置到目的地地图项目的路线。这里没有问题,但当按下"来源"按钮时,不会存储来源地图项,当搜索目的地地图项并按下"目的地"按钮时时,应用程序会从我的当前位置重新构建路线,忽略之前我按下了"来源"键钮,我需要的不是来自我当前位置的路线,而是来自来源地图项的路线。

所以在代码中,我定义了变量:

var mapItems: [MKMapItem]?
private var sourceMapItem: MKMapItem!
@IBOutlet weak var selectPointBmessage: UILabel!
@IBOutlet weak var resultMapView: MKMapView!
@IBOutlet weak var resultName: UILabel!
@IBOutlet weak var resultAddress: UILabel!

两个函数:findMe((,用于搜索我的当前位置;buildRoute(destinationMapItem:MKMapItem(,用于构建从我的当前地点(如果源地图项为零(到destinationMappingItem的路线。

和两个按钮:

@IBAction func sourceButton(_ sender: UIButton) {
// add searched mapItems to Array of MapItems
sourceMapItem = mapItems!.first
// message saying the user to find destination is source button is pressed
selectPointBmessage.isHidden = false
}
@IBAction func buildRouteButton(_ sender: UIButton) {
// add searched mapItems to Array of MapItems
let destinationMapItems = mapItems!.compactMap { (mapItem) -> MKMapItem in
let destinationMapItem = mapItem
return destinationMapItem
}
// for each if several or for one if one - build a route(s) to it
for destinationMapItem in destinationMapItems {
buildRoute(sourceMapItem: sourceMapItem, destinationMapItem: destinationMapItem)
}  
}

(mapItems是在Search Table View Controller中定义和记录的。在这里,我们使用compact map对它们进行解压缩,并开始与它们交互。(

以及添加注释、将路线添加到mapView、使用Suggest TVC和Search TVC的两个Swift文件等其他内容。还添加了StoryBoard的printScreen来显示它是如何组织的。故事板打印屏幕如果需要更多详细信息,请键入。

因此:我如何让我的应用程序记住sourceMapItem,当按下Destination按钮时,构建用户定义的点到点的路线?

所以我创建了一个mapItems数组,在选择表行时将mapItems存储在其中。然后,当使用该数组调用我的按钮时,我已经为源点和目标点分配了值。

最新更新