2012-03-27 37 views
51

Tôi có tọa độ GPS (vĩ độ, kinh độ) và tôi nhanh chóng muốn đặt một ghim đơn trên MKMapView hiển thị vị trí đó. Tất cả mọi thứ hoạt động tốt, nhưng khi tôi chỉ cần một pin duy nhất mà không có chú thích là có một cách nhanh hơn để làm điều này hoặc là những gì tôi có dưới đây những gì cần phải được thực hiện?Nhanh chóng thêm ghim đơn vào 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; 
} 

NB: Tôi không cần phải kiểm tra xem chú thích tái sử dụng như tôi chỉ sử dụng pin để hiển thị một vị trí trong một cái nhìn chi tiết (mà bị phá hủy và tái tạo lần sau một cái nhìn chi tiết được yêu cầu) .

Trả lời

4

Vì bạn muốn tạo hiệu ứng thả, bạn sẽ cần triển khai viewForAnnotation như bạn đã thực hiện vì thuộc tính đó là NO theo mặc định.

Nếu bạn không cần tạo hiệu ứng thả, bạn có thể loại bỏ hoàn toàn việc thực thi phương pháp viewForAnnotation và tắt chú thích, đặt chú thích title thành không hoặc để trống khi thêm chú thích thay thế.

Nếu bạn cần hoạt ảnh thả ghim và bạn cũng hiển thị vị trí của người dùng (dấu chấm màu xanh), bạn cũng sẽ cần phải kiểm tra MKUserLocation trong viewForAnnotation và trả lại nil.

Nếu không, bạn có thể xóa toàn bộ phương thức viewForAnnotation và ghim màu đỏ mặc định sẽ xuất hiện không có hoạt ảnh, chú thích sẽ hiển thị nếu title không để trống và vị trí người dùng sẽ hiển thị dưới dạng chấm màu xanh dương.

+0

Thats một điểm tốt, tôi đã cố gắng không thực hiện viewForAnnotation nhưng tôi đã không nhận ra rằng cả hai tiêu đề và phụ đề của tôi là trỏ đến NSStrings.Tôi không quá gắn liền với việc thả pin, nhưng tôi nghĩ bây giờ nó trong một sẽ để lại nó như nó được. Cảm ơn bạn rất nhiều vì câu trả lời của bạn, rất hữu ích và chắc chắn một cái gì đó tôi sẽ sử dụng trong tương lai. – fuzzygoat

111

Thay vì sử dụng phương pháp -mapView:viewForAnnotation:, chỉ cần đặt mã cho MKPointAnnotation vào phương thức -viewDidLoad của bạn. Nó sẽ không animate sự sụt giảm, nhưng nó rất dễ dàng.

// 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]; 

phiên bản Swift:

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

là nó có thể tạo hiệu ứng thả một MKPointAnnotation? – VeganKid

+0

Bạn không thể dễ dàng tạo hiệu ứng thả. Nếu bạn muốn hoạt ảnh, hãy sử dụng phương thức ủy nhiệm 'mapView: viewForAnnotation:'. –

6

Phương pháp dễ nhất và đơn giản nhất để thả ghim và hiển thị vị trí bây giờ trong Bản đồ Xem là chỉ cần thêm đoạn mã này trong phương pháp viewDidLoad của bạn. (Giả sử vị trí hiện tại của người dùng đã được bạn tìm nạp).

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

Bạn có thể thiết lập các điểm và cũng là khu vực như thế này:

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 –

+0

Hoạt động tốt ..! Cảm ơn.. – Gati

3

phiên bản Swift add pin trong 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) 
} 

phiên bản Swift tập trung một vùng hoặc pin

func focusMapView() { 
    let mapCenter = CLLocationCoordinate2DMake(20.836864, -156.874269) 
    let span = MKCoordinateSpanMake(0.1, 0.1) 
    let region = MKCoordinateRegionMake(mapCenter, span) 
    mapView.region = region 
} 

Để tìm hiểu thêm chi tiết s truy cập "Load MKMapView using Swift".

0

Đơn giản chỉ cần bạn có thể thêm nó thích:

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) 

Nó trông giống như: enter image description here

Các vấn đề liên quan