2016-09-15 3 views
0

Swift - Custom MKAnnotationView, set label titleКак использовать пользовательский MKAnnotationView в ViewController

Эта ссылка говорит мне, как создать пользовательские аннотации. Я новичок в приложении IoS. Попытка понять, как использовать это в коде. Я хочу изменить шрифт в вызове и иметь 2 строки вместо одного. Кажется, этот класс может все это сделать, но я не знаю, как использовать это в контроллере представления для изменения шрифта. В настоящее время, это то, что у меня есть и создали класс, как предложено в ссылке:

let annotation = MKPointAnnotation() 
annotation.coordinate = coordinate    
annotation.title=title 
self.map.addAnnotation(annotation) 

Как изменить это использовать пользовательский класс?

БЛАГОДАРЯ

Ram

ответ

0

Как изменить это использовать пользовательский класс?

Вы должны понимать, что существует разница между аннотацией и аннотацией. Первый объект, связанный с некоторой точкой или областью карты. Вы добавляете аннотации к виду карты, а затем представление карты заботится о том, чтобы выяснить, когда нужно отображать определенную аннотацию, чтобы вам не приходилось беспокоиться о том, какая часть карты видна, каков уровень масштабирования, и т. д. Вы можете создавать подклассы MKAnnotation, если вы хотите сохранить какие-то пользовательские данные в самой аннотации. Например, существует подкласс MKUserAnnotation, который добавляет свойство heading; вы можете сделать то же самое в своем подклассе аннотации.

Аннотации вид обеспечивает визуальное представление аннотации. Вид карты может содержать сотни или тысячи аннотаций, но обычно в любой момент времени их нужно будет отобразить только в нескольких экземплярах. Когда представление карты хочет отобразить аннотацию, оно вызывает метод делегата mapView(_:viewFor:), и делегат возвращает соответствующий аннотационный вид, настроенный для данной аннотации. Если вы хотите использовать свой собственный подкласс MKAnnotationView, как указывает ваш заголовок вопроса, тогда вы должны реализовать mapView(_:viewFor:) в своем делете делегата на карте, чтобы он создавал экземпляр вашего пользовательского подкласса MKAnnotationView, настраивая его и возвращает его.

* Перед вашей карты зрения делегат фактически создает новый вид аннотаций, вы должны вызвать метод dequeueReusableAnnotationView(withIdentifier:) вид карты, которая может возвратить представление, которое можно использовать вместо создания нового. Повторное использование аннотаций очень похоже на то, как UITableView повторно использует ячейки таблицы; в обоих случаях идея состоит в том, чтобы избежать постоянного создания и уничтожения недолговечных просмотров. Все это объясняется в документах, поэтому посмотрите там полное объяснение.

+0

Спасибо много для подробного объяснения. Позвольте мне переварить все это, и, возможно, я смогу реализовать. –

0

Вы должны реализовать методы делегата для MKMapView:

import UIKit 
import MapKit 

extension MapVC: MKMapViewDelegate, CLLocationManagerDelegate 
{ 
    func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) 
    { 
     ... 
    } 

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

     if annotation is MKUserLocation { 
      //return nil so map view draws "blue dot" for standard user location 
      return nil 
     } 
     let reuseId = "pin" 

     var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView 
     if pinView == nil { 
      pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 
      pinView.canShowCallout = true 
      pinView.animatesDrop = true 
      pinView.pinColor = .Purple 
     } 
     else { 
      pinView!.annotation = annotation 
     } 
     return pinView 
    } 
} 

Вместо создания пользовательского представления аннотаций вы можете использовать MKPointAnnotation, как вы начали с кодом просто установить:

annotation.canShowCallout = true 
Смежные вопросы