廢話不多說 直接上項目工程 ,還是 先看下效果圖吧!
項目中有兩個文件,chonViewController 和mapLocation文件 ,mapLocation 文件用於地標顯示 並有附加信息,昨天做得時候附加信息顯示正常,今天想寫點博客 卻不顯示了 ,很郁悶!<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICA8aW1nIHNyYz0="" alt="\">
新建工程後 記得加入類庫,MapKit.framework 具體添加方法 這裡不在說明了
下面 看下 chonViewController.h 文件 代碼如下:
#import#import #import "mapLocation.h" @interface chonViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *txtQueryKey; @property (weak, nonatomic) IBOutlet MKMapView *mapView; - (IBAction)geocodeQuery:(id)sender; @end
// // chonViewController.m // MyLocation2 // // Created by choni on 14-5-13. // Copyright (c) 2014年 choni. All rights reserved. // #import "chonViewController.h" @interface chonViewController () @end @implementation chonViewController - (void)viewDidLoad { [super viewDidLoad]; // 標注地圖類型 _mapView.mapType = MKMapTypeStandard ; //用於將當前視圖控制器賦值給地圖視圖的delegate屬性 _mapView.delegate = self ; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } #pragma mark - 查詢按鈕觸發動作 - (IBAction)geocodeQuery:(id)sender { if (_txtQueryKey.text == nil || [_txtQueryKey.text length] == 0) { return ; } CLGeocoder *geocode = [[CLGeocoder alloc] init]; [geocode geocodeAddressString:_txtQueryKey.text completionHandler:^(NSArray *placemarks, NSError *error) { NSLog(@"查詢記錄數: %i",[placemarks count]); if ([placemarks count ] > 0) { //移除目前地圖上得所有標注點 [_mapView removeAnnotations:_mapView.annotations]; } for (int i = 0; i< [placemarks count]; i++) { CLPlacemark * placemark = placemarks[i]; //關閉鍵盤 [_txtQueryKey resignFirstResponder]; //調整地圖位置和縮放比例,第一個參數是目標區域的中心點,第二個參數:目標區域南北的跨度,第三個參數:目標區域的東西跨度,單位都是米 MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(placemark.location.coordinate, 10000, 10000); //重新設置地圖視圖的顯示區域 [_mapView setRegion:viewRegion animated:YES]; // 實例化 MapLocation 對象 mapLocation * annotation = [[mapLocation alloc] init]; annotation.streetAddress = placemark.thoroughfare ; annotation.city = placemark.locality; annotation.state = placemark.administrativeArea ; annotation.zip = placemark.postalCode; annotation.coordinate = placemark.location.coordinate; //把標注點MapLocation 對象添加到地圖視圖上,一旦該方法被調用,地圖視圖委托方法mapView:ViewForAnnotation:就會被回調 [_mapView addAnnotation:annotation]; } }]; } #pragma mark mapView Delegate 地圖 添加標注時 回調 - (MKAnnotationView *) mapView:(MKMapView *)theMapView viewForAnnotation:(id) annotation { // 獲得地圖標注對象 MKPinAnnotationView * annotationView = (MKPinAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:@"PIN_ANNOTATION"]; if (annotationView == nil) { annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"PIN_ANNOTATION"]; } // 設置大頭針標注視圖為紫色 annotationView.pinColor = MKPinAnnotationColorPurple ; // 標注地圖時 是否以動畫的效果形式顯示在地圖上 annotationView.animatesDrop = YES ; // 用於標注點上的一些附加信息 annotationView.canShowCallout = YES ; return annotationView; } - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { _mapView.centerCoordinate = userLocation.location.coordinate; } - (void)mapViewDidFailLoadingMap:(MKMapView *)theMapView withError:(NSError *)error { NSLog(@"error : %@",[error description]); } @end
// // mapLocation.h // MyLocation2 // // Created by choni on 14-5-13. // Copyright (c) 2014年 choni. All rights reserved. // #importmapLocation.m 文件如下:#import @interface mapLocation : NSObject // 地圖標點類必須實現 MKAnnotation 協議 // 地理坐標 @property (nonatomic ,readwrite) CLLocationCoordinate2D coordinate ; //街道屬性信息 @property (nonatomic , copy) NSString * streetAddress ; // 城市信息屬性 @property (nonatomic ,copy) NSString * city ; // 州,省 市 信息 @property(nonatomic ,copy ) NSString * state ; //郵編 @property (nonatomic ,copy) NSString * zip ; @end
// // mapLocation.m // MyLocation2 // // Created by choni on 14-5-13. // Copyright (c) 2014年 choni. All rights reserved. // #import "mapLocation.h" @implementation mapLocation #pragma mark 標點上的主標題 - (NSString *)title{ return @"您的位置!"; } #pragma mark 標點上的副標題 - (NSString *)subtitle{ NSMutableString *ret = [NSMutableString new]; if (_state) { [ret appendString:_state]; } if (_city) { [ret appendString:_city]; } if (_city && _state) { [ret appendString:@", "]; } if (_streetAddress && (_city || _state || _zip)) { [ret appendString:@" · "]; } if (_streetAddress) { [ret appendString:_streetAddress]; } if (_zip) { [ret appendFormat:@", %@",_zip]; } return ret; } @end