2016-12-17 4 views
0

Я бы хотел заменить логотип MKPointAnnotation по умолчанию на пользовательский.Пользовательское изображение на 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 не называется нигде, потому что я попробовал простую печать («привет») в ней, и она не появляется в консоли и даже если я удалю все этот код функции , это ничего не меняет в моем приложении.

Вот почему мне интересно, как я мог столкнуться с этой проблемой.

Я не понимаю 100% моего кода, потому что я взял его из пользователя переполнения стека, я имею в виду, что я понимаю весь код, кроме части mapView().

ответ

0

Я считаю, что Xcode показал предупреждение, если вы создали новый проект с настройками по умолчанию. (Вы не должны игнорировать любой из предупреждений.)

Instance метод 'MAPview (MAPview: viewForAnnotation :) почти соответствует факультативное требование' MAPview (_: viewFor :) протокола 'MKMapViewDelegate'

Эта строка кода:

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

не реализует какой-либо из методов протокола, объявленных в MKMapViewDelegateв Swift 3.

И функция быстрого исправления (выберите первый) фиксирует это как:

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

Если Xcode не поможет вам исправить, если, возможно, придется сделать это самостоятельно.

Во всяком случае, с исправлением, показанным выше, следует вызвать метод.

Смежные вопросы