IOS 使用IOS6苹果地图

IOS应用程序中使用Map Kit API开发地图应用程序。其核心是MKMapView类的使用。我们可以设置地图显示方式,控制地图,可以在地图上添加标注。

1.显示地图

  在Map Kit API中显示地图的师徒是MKMapView,他的委托协议是MKMapViewDelegate。Map Kit API使用需要导入MapKit框架。

  下面通过一个实例介绍一下Map Kit API的使用,实例如图所示,再输入查询地点关键字文本框中输入关键字,单击查询,先进行地理信息编码查询,查询获得地标后在地图上标注出来。IOS 使用IOS6苹果地图

 

首先添加框架MapKit.framework,设置视图,在ViewController.h代码如下:

 1 #import <UIKit/UIKit.h>

 2 #import <MapKit/MapKit.h>

 3 #import "HBMapLocation.h"

 4 

 5 @interface HBMaPViewController : UIViewController<MKMapViewDelegate>

 6 @property (weak, nonatomic) IBOutlet UITextField *txtQueryKey;

 7 @property (weak, nonatomic) IBOutlet MKMapView *mapView;

 8 - (IBAction)gecodeQuery:(id)sender;

 9 - (IBAction)getMyPlace:(id)sender;

10 

11 @property (nonatomic ,readwrite)CLLocationCoordinate2D coordinate;

12 @end

其中头文件中的“HBMapLocation.h”是我们定义的描述地图标注点类,稍后再说。在ViewController.m中代码如下:

  1 - (void)viewDidLoad

  2 {

  3     [super viewDidLoad];

  4     // Do any additional setup after loading the view.

  5     self.mapView.mapType = MKMapTypeStandard;

  6     self.mapView.delegate = self;

  7     self.mapView.showsUserLocation = YES;

  8     [_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

  9 }

其中viewDidLoad方法中设置地图的类型,他的类型有3种:

  (1)MKMapTypeStandard标注地图类型

  (2)MKMapTypeSatellite 卫星地图类型

  (3)MKMapTypeHybrid混合地图类型。

 

2.添加标注

  如果要实现在地图视图上添加标注点,需要两个步骤:第一步时触发添加动作;第二步是实现地图委托方法mapView:viewForAnnotation:完成添加标注。

  2.1 触发添加动作

  通过查询按钮触发添加标注代码如下:

 1 - (IBAction)gecodeQuery:(id)sender {

 2     

 3     if(_txtQueryKey.text == nil || [_txtQueryKey.text length] ==0 )

 4     {

 5         return;

 6     }

 7     

 8     CLGeocoder *geocoder = [[CLGeocoder alloc]init];

 9     [geocoder geocodeAddressString:_txtQueryKey.text completionHandler:^(NSArray *placemarks, NSError *error) {

10         int i=[placemarks count];

11         NSLog(@"查询记录数:%i",i);

12         

13         if([placemarks count]>0)

14         {

15             [_mapView removeAnnotations:_mapView.annotations];

16         }

17         

18         for (int i=0; i<[placemarks count]; i++) {

19             CLPlacemark *placemark = placemarks[i];

20             

21             //关闭键盘

22             [self.txtQueryKey resignFirstResponder];

23             

24             //调整地图位置和缩放比例

25             MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(placemark.location.coordinate, 3000, 3000);

26             [_mapView setRegion:viewRegion animated:YES];

27             

28             HBMapLocation *annotation = [[HBMapLocation alloc]init];

29             annotation.streetAddress=placemark.thoroughfare;

30             annotation.city=placemark.locality;

31             annotation.state=placemark.administrativeArea;

32             annotation.zip=placemark.postalCode;

33             annotation.coordinate=placemark.location.coordinate;

34             

35             [_mapView addAnnotation:annotation];

36         }

37     }];

38     

39 }

2. 实现地图委托方法mapView:viewForAnnotation: 完成添加标注

 1 - (IBAction)getMyPlace:(id)sender {

 2     self.mapView.centerCoordinate = self.coordinate;

 3     MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(self.coordinate, 3000, 3000);

 4     [_mapView setRegion:viewRegion animated:YES];

 5     

 6 }

 7 

 8 -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation

 9 {

10     MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:@"PIN_ANNOTATION"];

11     

12     if(annotationView == nil)

13     {

14         annotationView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"PIN_ANNOTATION"];

15     }

16     

17     annotationView.pinColor = MKPinAnnotationColorPurple;

18     annotationView.animatesDrop = YES;

19     annotationView.canShowCallout = YES;

20     

21     return annotationView;

22 }

 

3.跟踪用户位置变化

 MapKit 提供个跟踪用户位置和方向变化的API,可以不用自己编写定位服务代码。开启地图的showUserLocation属性,并设置方法setUserTrackingMode:就可以了,其代码写在viewDidLoad中。

然后还需要实现地图视图委托方法mapView:didUpdateUserLocation: 代码如下

1 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

2 {

3     self.coordinate=userLocation.location.coordinate;

4     self.mapView.centerCoordinate = userLocation.location.coordinate;

5      MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(userLocation.location.coordinate, 3000, 3000);

6     [_mapView setRegion:viewRegion animated:YES];

7 }

其中自定义标注类HBMapLocation.h代码如下

 1 #import <Foundation/Foundation.h>

 2 #import <MapKit/MapKit.h>

 3 

 4 @interface HBMapLocation : NSObject<MKAnnotation>

 5 

 6 

 7 //街道信息属性

 8 @property (nonatomic,copy)NSString *streetAddress;

 9 //城市信息属性

10 @property (nonatomic,copy)NSString *city;

11 //州,省,市信息

12 @property (nonatomic,copy)NSString *state;

13 //邮编

14 @property (nonatomic,copy)NSString *zip;

15 //地理坐标

16 @property (nonatomic ,readwrite)CLLocationCoordinate2D coordinate;

17 

18 @end

HBMapLocation.m代码如下:

 1 @implementation HBMapLocation

 2 

 3 -(NSString *)title

 4 {

 5     return @"要查找的位置";

 6 }

 7 

 8 -(NSString *)subtitle

 9 {

10     NSMutableString *ret = [NSMutableString new];

11     if(_state)

12     {

13         [ret appendString:_state];

14     }

15     if(_city)

16     {

17         [ret appendString:_city];

18     }

19     if(_city && _state)

20     {

21         [ret appendString:@", "];

22     }

23     if(_streetAddress && (_city || _state || _zip))

24     {

25         [ret appendString:@"?"];

26     }

27     if(_streetAddress)

28     {

29         [ret appendString:_streetAddress];

30     }

31     if(_zip)

32     {

33         [ret appendFormat:@", %@",_zip];

34     }

35     return ret;

36 }

37 

38 @end

运行如下:IOS 使用IOS6苹果地图

你可能感兴趣的:(iOS6)