图像注释不同



我创建了一个带有不同注释和搜索的地图视图。我无法根据引脚归因于不同的图像。我也有另一个问题,当我进行搜索时,它将其删除,将其放在新的地方。以下是年轻编码器的代码。预先感谢您的帮助。

import MapKit
import UIKit
import CoreLocation
class MapViewController: UIViewController, UISearchBarDelegate, MKMapViewDelegate {
    @IBOutlet weak var MapView: MKMapView!
    var searchController:UISearchController!
    var annotation:MKAnnotation!
    var localSearchRequest:MKLocalSearchRequest!
    var localSearch:MKLocalSearch!
    var localSearchResponse:MKLocalSearchResponse!
    var error:NSError!
    var pointAnnotation:MKPointAnnotation!
    var pinAnnotationView:MKPinAnnotationView!
    var coordinates: [[Double]]!
    var name:[String]!
    let regionRadius: CLLocationDistance = 1000
    @IBAction func showSearchBar(_ sender: Any) {
        searchController = UISearchController(searchResultsController: nil)
        searchController.hidesNavigationBarDuringPresentation = false
        self.searchController.searchBar.delegate = self
        present(searchController, animated: true, completion: nil)
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        self.MapView.delegate = self
        var Tirta = CustomPointAnnotation()
        Tirta.coordinate = CLLocationCoordinate2DMake(-8.415162, 115.315360)
        Tirta.title = "Tirta Empul"
        Tirta.imageName = "PaConseil.png"
        var Goa = CustomPointAnnotation()
        Goa.coordinate = CLLocationCoordinate2DMake(-8.551313, 115.468865)
        Goa.title = "Goa Lawah"
        Goa.imageName = "PaMecontent.png"
        MapView.addAnnotation(Tirta)
        MapView.addAnnotation(Goa)
        // 3
        let region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: -8.670458199999999, longitude: 115.2126293), span: MKCoordinateSpan(latitudeDelta: 2, longitudeDelta: 2))
        self.MapView.setRegion(region, animated: true)
    }
    func MapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
        print("delegate called")
        if !(annotation is CustomPointAnnotation) {
            return nil
        }
        let reuseId = "test"
        var AnnotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
        if AnnotationView == nil {
            AnnotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
            AnnotationView?.canShowCallout = true
        }
        else {
            AnnotationView?.annotation = annotation
        }
        func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
        let CustomPointAnnotation = annotation as! CustomPointAnnotation
        AnnotationView?.image = UIImage(named:CustomPointAnnotation.imageName)
        return AnnotationView
    }
    class CustomPointAnnotation: MKPointAnnotation {
        var imageName: String!
    }
    func searchBarSearchButtonClicked(_ searchBar: UISearchBar){
        //1
        searchBar.resignFirstResponder()
        dismiss(animated: true, completion: nil)
        if self.MapView.annotations.count != 0{
            annotation = self.MapView.annotations[0]
            self.MapView.removeAnnotation(annotation)
        }
        //2
        localSearchRequest = MKLocalSearchRequest()
        localSearchRequest.naturalLanguageQuery = searchBar.text
        localSearch = MKLocalSearch(request: localSearchRequest)
        localSearch.start { (localSearchResponse, error) -> Void in
            if localSearchResponse == nil{
                let alertController = UIAlertController(title: nil, message: "Place Not Found", preferredStyle: UIAlertControllerStyle.alert)
                alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default, handler: nil))
                self.present(alertController, animated: true, completion: nil)
                return
            }
            //3
            self.pointAnnotation = MKPointAnnotation()
            self.pointAnnotation.title = searchBar.text
            self.pointAnnotation.coordinate = CLLocationCoordinate2D(latitude: localSearchResponse!.boundingRegion.center.latitude, longitude:     localSearchResponse!.boundingRegion.center.longitude)

            self.pinAnnotationView = MKPinAnnotationView(annotation: self.pointAnnotation, reuseIdentifier: nil)
            self.MapView.centerCoordinate = self.pointAnnotation.coordinate
            self.MapView.addAnnotation(self.pinAnnotationView.annotation!)
        }
    }
}

import Foundation
import MapKit
class CustomPointAnnotation: MKPointAnnotation {
    var coordinates: CLLocationCoordinate2D
    var name: String!
    var imageName: UIImage!
    init(coordinates: CLLocationCoordinate2D) {
        self.coordinates = coordinates
    }
}

我将假设您已经更新了Xcode,以便您现在使用Swift3。那么,问题是该方法永远不会被执行:

func MapView(mapView: MKMapView!, 
    viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {

...的原因是那不是其正确的"签名"。该方法现在是这样定义的:

func mapView(_ mapView: MKMapView, 
    viewFor annotation: MKAnnotation) -> MKAnnotationView?

最新更新