[英]How to use Custom MKAnnotationView in viewcontroller
Swift-自定義MKAnnotationView,設置標簽標題
該鏈接告訴我如何創建自定義注釋。 我是IoS應用程序的新手。 試圖了解如何在代碼中使用它。 我想更改通話中的字體,並使用2行而不是1行。 此類似乎可以完成所有工作,但是我不知道如何在視圖控制器中使用此類來更改字體。 目前,這是我所擁有的,並且已經按照鏈接中的建議創建了該類:
let annotation = MKPointAnnotation()
annotation.coordinate = coordinate
annotation.title=title
self.map.addAnnotation(annotation)
如何將其更改為使用自定義類?
謝謝
內存
如何將其更改為使用自定義類?
您必須了解,批注和批注視圖之間存在區別。 前者是與地圖的某個點或區域關聯的對象。 您向地圖視圖添加了注釋,然后地圖視圖會弄清楚何時需要顯示特定的注釋,這樣您就不必擔心地圖的哪個部分可見,縮放級別是什么,如果要在注釋本身中存儲某種自定義數據,則可以創建MKAnnotation
子類。 例如,有一個MKUserAnnotation
子類添加了heading
屬性。 您可以在自己的注釋子類中執行相同的操作。
注釋視圖提供注釋的視覺表示。 地圖視圖可以包含成百上千個注解,但通常只有少數注解隨時需要顯示。 當地圖視圖要顯示注釋時,它將調用其委托的mapView(_:viewFor:)
方法,並且委托返回為該注釋配置的適當注釋視圖。 如果要使用自己的MKAnnotationView
子類(如問題標題所示),則應在地圖視圖委托中實現mapView(_:viewFor:)
,以便實例化*自定義MKAnnotationView
子類的實例,對其進行配置並返回它。
*在地圖視圖委托實際創建新的注釋視圖之前,應調用地圖視圖的dequeueReusableAnnotationView(withIdentifier:)
方法,該方法可能會返回一個視圖,您可以使用該視圖代替創建新視圖。 重用批注視圖非常類似於UITableView
重用表單元格的方式。 在這兩種情況下,其想法都是避免不斷創建和破壞短期視圖。 所有這些都在文檔中進行了說明,因此請在此處查找完整的說明。
您需要為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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.