你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 輸入地點 顯示當前位置地圖並用大頭針標注

iOS 輸入地點 顯示當前位置地圖並用大頭針標注

編輯:IOS開發綜合

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

\

項目中有兩個文件,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文件代碼如下:

//
//  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 代碼如下:

//
//  mapLocation.h
//  MyLocation2
//
//  Created by choni on 14-5-13.
//  Copyright (c) 2014年 choni. All rights reserved.
//

#import 
#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 文件如下:

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

Ok 搞定, 代碼中注釋還是比較詳細的!


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved