廢話不多說 直接上項目工程 ,還是 先看下效果圖吧!

項目中有兩個文件,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