簡體   English   中英

如何在ViewController中使用自定義MKAnnotationView

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM