2015-04-18 2 views
3

Я пытаюсь реализовать индивидуальный вид аннотации на булавке в MKMapView. Другой пользователь дал мне эту функцию для создания настраиваемого MKPinAnnotationView. https://stackoverflow.com/users/3845091/zisoftКак показать MKPinAnnotationView на MKMapview в swift

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { 
if annotation is PinAnnotation { 
    let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "myPin") 

    pinAnnotationView.pinColor = .Purple 
    pinAnnotationView.draggable = true 
    pinAnnotationView.canShowCallout = true 
    pinAnnotationView.animatesDrop = true 

    let deleteButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton 
    deleteButton.frame.size.width = 44 
    deleteButton.frame.size.height = 44 
    deleteButton.backgroundColor = UIColor.redColor() 
    deleteButton.setImage(UIImage(named: "trash"), forState: .Normal) 

    pinAnnotationView.leftCalloutAccessoryView = deleteButton 

    return pinAnnotationView 
} 

return nil 

}

И я бы передать функции параметры карты я хочу его и аннотацию я хочу настроить. т.е. mapView(myMap, viewForAnnotation: point)

Это все хорошо, и имеет смысл, однако, когда я пытаюсь добавить MKPinAnnotationView на карту с помощью
map.addAnnotation(mapView(myMap, viewForAnnotation: point))
ошибки Это, говоря, что тип данных не является действительным. Кто-нибудь знает, как физически визуализировать вывод на карте с помощью индивидуального представления?

Простое решение всегда лучше.

Спасибо!

+1

Может, это поможет вам в лучший способ HTTP: //www.raywenderlich .com/87008/overlay-views-mapkit-swift-tutorial –

ответ

2

В вашем вопросе, вы говорите о методе viewForAnnotation:

И я бы передать функции параметры карты я хочу его на и аннотации я хочу настроить. т. е. mapView (myMap, viewForAnnotation: point)

Нет, это неправильно.

Вы бы не передать функции параметров и т.д.

Это viewForAnnotation метода является делегатом метода вы реализуете, но не вызывается непосредственно вами.

Вид карты (MKMapView) будет называть его и передать функции параметров и т.д.

Метод viewForAnnotation делегата, где вы можете предоставить пользовательскую вид для данной аннотации модели объекта ,

Чтобы убедиться, что посмотреть на карту называют свои методы делегата, вы должны либо:

  • Убедитесь delegate розетки вида карты подключена к его виду контроллеру в раскадровке или
  • В коде, как правило, в viewDidLoad, do mapView.delegate = self.


Когда вы звоните addAnnotation, вы передаете ему аннотацию модель объект (например, MKPointAnnotation или что-нибудь, который реализует протокол MKAnnotation).

Так эта линия:

map.addAnnotation(mapView(myMap, viewForAnnotation: point)) 

должен быть что-то вроде:

map.addAnnotation(point) 

MKPinAnnotationView объекта (и все, что подклассы MKAnnotationView) является вида для аннотации модели объекта - - это не одно и то же.


Эти вопросы и темы были рассмотрены уже много раз в документации iOS и MapKit, на SO и на обучающих программах, доступных в других местах.

Вот только несколько связанных с этим вопросов на SO, которые могут оказаться полезными:

+0

Спасибо, это решило мою проблему и делает это намного яснее. –

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