簡體   English   中英

MapKit,通過按鈕將銷釘放在一個位置上

[英]MapKit, Dropping pin on one location with button

嘗試學習如何在用戶按下屏幕上的按鈕時在用戶位置放置大頭針。 我需要使用Mkannotation嗎?我還希望該引腳在將來刪除新的引腳時消失。 這是我在controller.h中擁有的代碼。 經度和緯度也僅是示例。

謝謝

@implementation ViewController

- (void)viewWillAppear:(BOOL)animated {

CLLocationCoordinate2D zoomLocation;
zoomLocation.latitude = 39.281516;
zoomLocation.longitude = -76.580806;

MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation,             
0.1*METERS_PER_MILE, 0.1*METERS_PER_MILE);  

[_mapView setRegion:viewRegion animated:YES];

} 

雖然我認為這在“ 位置感知編程指南”的“ 向地圖添加注釋”部分中進行了詳細討論,但我有一些發現:

您問“我需要使用MKAnnotation嗎?” 是的,沒有。

  • 是的,所有注釋都應符合MKAnnotation協議。 如該指南所述,如果您可以創建自己的注釋子類,則希望它明確聲明其符合MKAnnotation協議。

  • 但是,不,您不必總是創建自己的符合MKAnnotation協議的注釋類。 您還可以使用預定義的注釋類MKPointAnnotation (它本身已經符合MKAnnotation協議),例如:

     MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; annotation.coordinate = CLLocationCoordinate2DMake(39.281516, -76.580806); annotation.title = @"Lens Crafters"; annotation.subtitle = @"2400 Boston St."; [self.mapView addAnnotation:annotation]; 

如果您希望在將新注釋添加到地圖上時使舊注釋消失,則只需(a)保留對舊注釋的引用; (b)添加新注釋時,請刪除舊注釋(如果有舊注釋); 然后(c)添加新注釋。

因此,您可能已經為注釋定義了一些類屬性:

@property (weak, nonatomic) id<MKAnnotation> annotation;

(兩個方面的觀察:首先,是否使用weakstrong取決於您和您的應用程序設計。通過說weak ,我是說,當從地圖中刪除注釋時,我很高興釋放annotation 。也許您希望保留它,直到您明確將該屬性nil為止,在這種情況下,您將使該屬性變strong 。這完全取決於您和應用程序的目標。其次,我使用id<MKAnnotation>類型(即“對象”符合MKAnnotation “),這使其更加靈活。如果以后使用您自己的自定義注釋類替換MKPointAnnotation ,此屬性仍然可以使用。但是如果您想將此annotation屬性明確定義為MKPointAnnotation以匹配您的注釋添加例程,也可以。)

無論如何,既然您擁有此屬性,現在就可以編寫一種方法來向地圖添加注釋(這將刪除舊的注釋):

- (void)addAnnotationAtCoordinate:(CLLocationCoordinate2D)coordinate
                            title:(NSString *)title
                         subtitle:(NSString *)subtitle
{
    if (self.annotation)
        [self.mapView removeAnnotation:self.annotation];

    MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
    annotation.coordinate = coordinate;
    annotation.title = title;
    annotation.subtitle = subtitle;

    [self.mapView addAnnotation:annotation];

    self.annotation = annotation;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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