gpt4 book ai didi

ios - 调用时未在 map View 上显示注释

转载 作者:行者123 更新时间:2023-12-01 15:26:33 25 4
gpt4 key购买 nike

这是与我的 Storyboard匹配的更新代码。有两个不同的 subview Controller , map View 和集合 View 。当用户单击允许卡片折叠和展开的按钮时,ContentViewController 也有一个动画。 mapView 是一个单独的 View 。问题是,当我运行它时,显示动画时会显示一个新的 View Controller ,而不是只替换 MapViewController。理想情况下,在运行时,用户会展开卡片 View ,然后单击集合 View 单元格,然后新的注释将填充屏幕顶部(因为这是 map View 所在的位置)。使用我当前的代码,注释没有显示在屏幕上。我将如何解决这个问题,以便在单击单元格时可以看到受尊重的注释?

这是代码。

import UIKit
import MapKit

struct PlacesOnMap {
var name: String
var latitude: Double
var longitude: Double

init(name: String, latitude: Double, longitude: Double) {
self.name = name
self.latitude = latitude
self.longitude = longitude
}
}

class ContentViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, MKMapViewDelegate {

@IBOutlet weak var mapView: MKMapView!

var placesVal = [PlacesOnMap(name: "place 1", latitude: 12.9716, longitude: 77.5946),
PlacesOnMap(name: "place 2", latitude: 12.2958, longitude: 76.6394),
PlacesOnMap(name: "place 3", latitude: 11.4102, longitude: 76.6950)
]
var buildings = [PlacesOnMap(name: "buildings 1", latitude: 12.9716, longitude: 77.5946),
PlacesOnMap(name: "buildings 2", latitude: 12.2958, longitude: 76.6394)
]
var recreation = [PlacesOnMap(name: "recreation 1", latitude: 28.54693, longitude: -81.393071),
PlacesOnMap(name: "recreation 2", latitude: 28.538523, longitude: -81.385399),
PlacesOnMap(name: "recreation 3", latitude: 28.542817, longitude: -81.378117),
PlacesOnMap(name: "recreation 4", latitude: 28.538985, longitude: -81.404694)
]

//helps create an intial view for the mapView; zooms in on Orlando
let startingLocation = CLLocation(latitude: 28.5383, longitude: -81.3792)
let distanceSpan: CLLocationDistance = 4000

let reuseIdentifier = "cell" // also enter this string as the cell identifier in the storyboard
var items = ["Places", "Buildings", "Recreations"]

override func viewDidLoad() {
super.viewDidLoad()

zoomLevel(location: startingLocation)
}

//controls how much the map is zoomed in based off of intial inputs from the startingLocation variable
func zoomLevel(location: CLLocation) {
let mapCoordinate = MKCoordinateRegion(center: location.coordinate, latitudinalMeters: distanceSpan, longitudinalMeters: distanceSpan)
mapView?.setRegion(mapCoordinate, animated: true)
}


// tell the collection view how many cells to make
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.items.count
}

// make a cell for each cell index path
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

// get a reference to our storyboard cell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! Cell

// Use the outlet in our custom class to get a reference to the UILabel in the cell
cell.textLabel.text = self.items[indexPath.item]
cell.backgroundColor = UIColor.cyan
return cell
}

// MARK: - UICollectionViewDelegate protocol
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// handle tap events
print("You selected cell #\(indexPath.item)!")
if(indexPath.item == 0){
setPlacesAnnotations()
}else if(indexPath.item == 1){
setBuildingsAnnotations()
}else if(indexPath.item == 2){
setRecreationAnnotations()
}
mapView?.delegate = self
}

func setPlacesAnnotations() {
let places = placesVal.map { placeOnMap -> MKPointAnnotation in
let place = MKPointAnnotation()
place.coordinate = CLLocationCoordinate2D(latitude: placeOnMap.latitude, longitude: placeOnMap.longitude)
place.title = placeOnMap.name
return place
}
mapView?.removeAnnotations(mapView.annotations)
mapView?.addAnnotations(places)
}

func setBuildingsAnnotations() {
let places = buildings.map { placeOnMap -> MKPointAnnotation in
let place = MKPointAnnotation()
place.coordinate = CLLocationCoordinate2D(latitude: placeOnMap.latitude, longitude: placeOnMap.longitude)
place.title = placeOnMap.name
return place
}
mapView?.removeAnnotations(mapView.annotations)
mapView?.addAnnotations(places)
}

func setRecreationAnnotations() {
let places = recreation.map { placeOnMap -> MKPointAnnotation in
let place = MKPointAnnotation()
place.coordinate = CLLocationCoordinate2D(latitude: placeOnMap.latitude, longitude: placeOnMap.longitude)
place.title = placeOnMap.name
return place
}
mapView?.removeAnnotations(mapView.annotations)
mapView?.addAnnotations(places)
}


func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
guard let annotationTitle = view.annotation?.title else
{
print("Unable to retrieve details")
return
}
print("User tapped on annotation with title: \(annotationTitle!)")
}

}

class Cell: UICollectionViewCell {
@IBOutlet weak var textLabel: UILabel!
}

Storyboard。
enter image description here

最佳答案

您需要创建一个 UICollectionView合一 ViewController然后将索引值传递给另一个 ViewController将其显示在 MKMapView .

创建了一个示例项目 here

关于ios - 调用时未在 map View 上显示注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62197076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com