MKPointAnnotation

时间:2016-12-17 18:19:05

标签: swift mkmapview mapkit

我想用自定义徽标替换默认的MKPointAnnotation徽标。

所以我在MapViewController中编写了这段代码:

import UIKit
import MapKit
import CoreLocation



class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate  {

@IBOutlet weak var myMap: MKMapView!
let locationManager = CLLocationManager()
var monPin:CustomPointAnnotation!
var pinAnnotationView:MKPinAnnotationView!


override func viewDidLoad() {
    super.viewDidLoad()

    //Mark: - Authorization
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.startUpdatingLocation()

    myMap.delegate = self
    myMap.mapType = MKMapType.standard
    myMap.showsUserLocation = true


    let location = CLLocationCoordinate2D(latitude: 43.2885108, longitude:5.3855545000000124)
    let center = location
    let region = MKCoordinateRegionMake(center, MKCoordinateSpan(latitudeDelta: 0.025, longitudeDelta: 0.025))
    myMap.setRegion(region, animated: true)

    monPin = CustomPointAnnotation()
    monPin.pinCustomImageName = "mapIcon"
    monPin.coordinate = location
    monPin.title = "Mon titre"
    monPin.subtitle = "mon Sous titre"


    pinAnnotationView = MKPinAnnotationView(annotation: monPin, reuseIdentifier: "pin")
    myMap.addAnnotation(pinAnnotationView.annotation!)



}


//MARK: - Custom Annotation
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {


    let reuseIdentifier = "pin"
    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier:reuseIdentifier)

    if annotationView == nil {
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier)
        annotationView?.canShowCallout = true
    } else {
        annotationView?.annotation = annotation
    }

    let customPointAnnotation = annotation as! CustomPointAnnotation
    annotationView?.image = UIImage(named: customPointAnnotation.pinCustomImageName)

    return annotationView
}

monPin.pinCustomImageName =" mapIcon"参考我的xassets

但它只显示经典的MKPointAnnotation图片(这一张:https://i.stack.imgur.com/pD82c.png

**我认为问题在于:**函数mapView没有在任何地方调用,因为我在其中尝试了一个简单的打印(" hello")并且它没有出现在控制台中甚至如果我删除所有这些功能代码,它不会改变我的应用程序。

这就是为什么我想知道如何面对这个问题。

我不理解我的100%代码,因为我是从一个堆栈溢出用户那里得到的,我的意思是我理解除mapView()部分之外的所有代码。

1 个答案:

答案 0 :(得分:0)

我相信如果您使用默认设置创建了一个新项目,Xcode会显示警告。 (你不应该忽略任何警告。)

  

实例方法'mapView(mapView:viewForAnnotation :)'几乎匹配   协议的可选要求'mapView(_:viewFor :)'   'MKMapViewDelegate'

这段代码:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ol id="list">
  <li>A</li>
  <li>B</li>
  <li>C</li>
</ol>

<input type="text" placeholder="Enter item to remove..." />
<button type="button">Remove Item</button>

未实现Swift 3 中func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 中声明的任何协议方法。

快速修复功能(选择第一个)将其修复为:

MKMapViewDelegate

如果您的Xcode无法解决问题,您可能需要自己制作。

无论如何,通过上面显示的修复,应该调用该方法。