添加框架CoreLocation、MapKit框架
一、首先了解大头针
要添加大头针需实现协议MKAnnotation ,由下图可以看到,一定要实现coordinate属性。
二、实现大头针协议
添加MyAnnotation类
#import <Foundation/Foundation.h> #import <MapKit/MapKit.h> //MKAnnotation是一个协议 ,添加大头针久需要实现该协议 //coordinate 属性是必须的,所以需要实现该属性 @interface MyAnnotation : NSObject<MKAnnotation> -(id)initWithCoordinate:(CLLocationCoordinate2D)coordinate title:(NSString *)title subtitle:(NSString *)subtitle; @end
// // MyAnnotation.m // MapView // // Created by City--Online on 15/4/20. // Copyright (c) 2015年 CYW. All rights reserved. // #import "MyAnnotation.h" @interface MyAnnotation () { CLLocationCoordinate2D _coordinate; NSString *_title; NSString *_subTitle; } @end @implementation MyAnnotation -(id)initWithCoordinate:(CLLocationCoordinate2D)coordinate title:(NSString *)title subtitle:(NSString *)subtitle { if (self==[super init]) { _coordinate=coordinate; _title=title; _subTitle=subtitle; } return self; } // 必选 -(CLLocationCoordinate2D)coordinate { return _coordinate; } //可选 -(NSString *)title { return _title; } -(NSString *)subtitle { return _subTitle; } @end
三、地图和添加大头针
// // ViewController.m // MapView // // Created by City--Online on 15/4/17. // Copyright (c) 2015年 CYW. All rights reserved. // #import "ViewController.h" #import <CoreLocation/CoreLocation.h> #import <MapKit/MapKit.h> #import "MyAnnotation.h" @interface ViewController ()<CLLocationManagerDelegate,MKMapViewDelegate> @property(nonatomic,strong)MKMapView *mapView; @property(nonatomic,strong)CLLocationManager *locationManager; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _locationManager=[[CLLocationManager alloc]init]; BOOL enable=[CLLocationManager locationServicesEnabled]; NSLog(@"%d",[CLLocationManager authorizationStatus]); if (!enable) { NSLog(@"用户未开启定位服务,无法定位"); return; } else if ([CLLocationManager authorizationStatus]<3) { [_locationManager requestWhenInUseAuthorization]; } CLLocationDistance distance=10.0; _locationManager.distanceFilter=distance; _locationManager.delegate=self; _locationManager.desiredAccuracy=kCLLocationAccuracyBest; [_locationManager startUpdatingLocation]; self.mapView=[[MKMapView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; //地图类型 // typedef NS_ENUM(NSUInteger, MKMapType) { // MKMapTypeStandard = 0, //标准地图 // MKMapTypeSatellite, //卫星地图 // MKMapTypeHybrid //混合地图 // } self.mapView.mapType=MKMapTypeStandard; //是否定位当前位置 否显示当前位置 self.mapView.showsUserLocation=YES; // typedef struct { // CLLocationCoordinate2D center; // MKCoordinateSpan span; // } MKCoordinateRegion; //中心点经纬度 CLLocationCoordinate2D locationCoordinate2D; locationCoordinate2D.latitude=22.544349; locationCoordinate2D.longitude= 113.94787; //范围比例尺 MKCoordinateSpan coordinateSpan; //纬度 coordinateSpan.latitudeDelta=0.05; //经度 coordinateSpan.longitudeDelta=0.05; //设置显示区域 MKCoordinateRegion coordinateRegion; coordinateRegion.center=locationCoordinate2D; coordinateRegion.span=coordinateSpan; [self.mapView setRegion:coordinateRegion animated:YES]; // self.mapView.region=coordinateRegion; [self.view addSubview:self.mapView]; UISegmentedControl *segmentedControl=[[UISegmentedControl alloc]initWithItems:@[@"普通地图",@"卫星地图",@"混合地图"]]; segmentedControl.selectedSegmentIndex=0; [segmentedControl addTarget:self action:@selector(selectSegmentIndex:) forControlEvents:UIControlEventValueChanged]; self.navigationItem.titleView=segmentedControl; //定义大头针类 MyAnnotation *annotation=[[MyAnnotation alloc]initWithCoordinate:locationCoordinate2D title:@"默认指定" subtitle:@"子标题"]; [self.mapView addAnnotation:annotation]; } -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { if (locations.count>0) { CLLocation *location=[locations firstObject]; CLLocationCoordinate2D locationCoordinate2D =location.coordinate; [self.mapView setRegion:MKCoordinateRegionMake(locationCoordinate2D, self.mapView.region.span) animated:YES]; NSLog(@"%lf ,%lf",locationCoordinate2D.longitude,locationCoordinate2D.longitude); MyAnnotation *annotation=[[MyAnnotation alloc]initWithCoordinate:locationCoordinate2D title:@"定位位置" subtitle:@"子标题"]; [self.mapView addAnnotation:annotation]; } } -(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { MyAnnotation *annotation=view.annotation; NSLog(@"%@",annotation.title); } -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"定位失败"); NSLog(@"%@",error); } - (void)selectSegmentIndex:(UISegmentedControl *)control { NSInteger index = control.selectedSegmentIndex; /* MKMapTypeStandard 普通地图(标准地图), MKMapTypeSatellite 卫星地图, MKMapTypeHybrid 混合地图 */ MKMapType mapType; switch (index) { //普通地图 case 0: mapType = MKMapTypeStandard; break; //卫星地图 case 1: mapType = MKMapTypeSatellite; break; //普通和卫星的混合地图 case 2: mapType = MKMapTypeHybrid; break; default: break; } //改变地图类型 self.mapView.mapType = mapType; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
四、注意
1.在info.plist中添加Key:NSLocationWhenInUseUsageDescription
2.在AppDelegate中添加导航控制器
时间: 2024-10-05 00:25:14