Swift 如何建立一个FROM地图项目的路线,我在搜索栏中定义了它。

问题描述 投票:0回答:1

如果题目没有那么准确,抱歉。我想建立一个从点到点的地图路线,关键是两个点都是用户定义的。所以我想从接口构建器中传递一个源点mapItem和目标点mapItem,并在它们之间建立一条路线。

我做了什么:我有一个建议表视图控制器,当在搜索栏中输入一些东西时,它会为搜索表视图控制器建议一些地方;然后搜索TVC将带有名称和地址的地图注释传递给结果地图视图。在我的结果图视图中,我有两个按钮:源和目的地。因此,当地址从搜索TVC传递过来时,mapView建议按两个按钮。如果Destination按钮被按下,则意味着Source地图项为nil,它将建立从我当前位置到目的地地图项的路线。这里没有问题,但是当按下Source按钮时,源地图项目没有被存储,当搜索目的地地图项目并按下Destination按钮时,应用程序再次从我的当前位置建立路线,忽略了之前我按下了Source按钮,我需要的路线不是从我的当前位置,而是从源地图项目。

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

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), 如果源地图项目为nil, 则从我的当前位置建立一条路线到destinationMapItem.

和两个按钮。

@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是在搜索表视图控制器中定义和记录的。在这里,我们使用压缩地图解压,并开始与它们进行交互。)

还添加了StoryBoard的printScreen来展示它是如何组织的。故事板的打印屏幕如果需要一些更多的细节,请打。

所以:如何让我的应用记住sourceMapItem,当Destination按钮被按下时,建立一条从点到用户定义的点的路线?

swift routes mapkit
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.