2012-03-27 56 views
51

我有一個GPS座標(緯度,經度),我很快想在MKMapView上放置一個顯示該位置的針。一切正常,但因爲我只需要一個沒有標註的針腳,是否有更快捷的方法來做到這一點,或者我有什麼需要做的?快速添加單針MKMapView?

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 
    MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"DETAILPIN_ID"]; 
    [pinView setAnimatesDrop:YES]; 
    [pinView setCanShowCallout:NO]; 
    return pinView; 
} 

注:我不需要,因爲我只能用針來顯示的詳細視圖的位置(這是破壞並重新創建一個詳細視圖請求下一次)檢查可重複使用的註解視圖。

回答

4

由於您想對放置進行動畫製作,因此您需要按照以前的方法實施viewForAnnotation,因爲該屬性默認爲NO

如果您不需要對放置進行動畫製作,則可以完全取消viewForAnnotation方法實施,並禁用標註,將標註的title設置爲零或空白,而不是添加註釋。

如果您確實需要插針放置動畫,並且您還顯示用戶的位置(藍點),則還需要檢查MKUserLocation中的viewForAnnotation並返回nil

否則,您可以刪除整個viewForAnnotation方法,並且默認的紅色別針會出現在沒有動畫的情況下,標註將顯示title是否不爲空,並且用戶位置將顯示爲藍色圓點。

+0

那是一個很好的點,我也儘量不實施viewForAnnotation,但我不知道,我的兩個標題和副標題是指向NSStrings。我並不是過分依賴銷釘,但我認爲現在它將會保持原樣。非常感謝您的回答,非常有幫助,我肯定會在將來使用。 – fuzzygoat 2012-03-27 16:12:08

111

代替使用-mapView:viewForAnnotation:方法,只需將MKPointAnnotation的代碼放入-viewDidLoad方法即可。它不會動畫掉落,但它很容易。

// Place a single pin 
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
[annotation setCoordinate:centerCoordinate]; 
[annotation setTitle:@"Title"]; //You can set the subtitle too 
[self.mapView addAnnotation:annotation]; 

斯威夫特版本:

let annotation = MKPointAnnotation() 
let centerCoordinate = CLLocationCoordinate2D(latitude: 41, longitude:29) 
annotation.coordinate = centerCoordinate 
annotation.title = "Title" 
mapView.addAnnotation(annotation) 
+2

是否可以對MKPointAnnotation的下拉進行動畫處理? – VeganKid 2015-10-03 17:12:07

+0

您無法輕鬆製作放置動畫。如果您想要動畫,請使用'mapView:viewForAnnotation:'委託方法。 – 2018-01-25 10:30:03

6

最簡單,最簡單的方法來刪除引腳和地圖視圖顯示當前位置是簡單地在您的viewDidLoad方法中添加此代碼。 (假設用戶的當前位置已由您提取)。

NSString *display_coordinates=[NSString stringWithFormat:@"Latitude is %f and Longitude is %f",coordinate.longitude,coordinate.latitude]; 

MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
[annotation setCoordinate:coordinate]; 
[annotation setTitle:@"Click Labs"];    
[annotation setSubtitle:display_coordinates]; 
[mapView addAnnotation:annotation]; 
32

您可以設置這樣的點,也是區域:

CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(lat, lon); 

MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1); 
MKCoordinateRegion region = {coord, span}; 

MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
[annotation setCoordinate:coord]; 

[self.staticMapView setRegion:region]; 
[self.staticMapView addAnnotation:annotation]; 
+0

thanks.its working – 2015-10-31 10:02:28

+0

Works well .. ..!謝謝.. – Gati 2016-02-29 09:48:36

3

添加PIN的斯威夫特版本的MKMapView:

func addPin() { 
    let annotation = MKPointAnnotation() 
    let centerCoordinate = CLLocationCoordinate2D(latitude: 20.836864, longitude:-156.874269) 
    annotation.coordinate = centerCoordinate 
    annotation.title = "Lanai, Hawaii" 
    mapView.addAnnotation(annotation) 
} 

集中的區域或銷

的斯威夫特版本
func focusMapView() { 
    let mapCenter = CLLocationCoordinate2DMake(20.836864, -156.874269) 
    let span = MKCoordinateSpanMake(0.1, 0.1) 
    let region = MKCoordinateRegionMake(mapCenter, span) 
    mapView.region = region 
} 

要了解更多詳細信息參觀「Load MKMapView using Swift」。

0

只要你可以將其添加喜歡:

mapView.mapType = MKMapType.standard 

    let location = CLLocationCoordinate2D(latitude: 23.0225,longitude: 72.5714) 

    let span = MKCoordinateSpanMake(0.05, 0.05) 
    let region = MKCoordinateRegion(center: location, span: span) 
    mapView.setRegion(region, animated: true) 

    let annotation = MKPointAnnotation() 
    annotation.coordinate = location 
    annotation.title = "Javed Multani" 
    annotation.subtitle = "Surat, India" 
    mapView.addAnnotation(annotation) 

它看起來像: enter image description here