这几天开始找工作,每个公司做得产品也各不相同.有一个公司做地图的.说起地图,很长时间没有去研究和学习了,都有点儿淡忘了,所以趁着现在空闲,赶紧又给抓起来,捂一捂.也算是温故而知新.

     首先,讲讲定位.要定位,首先需要导入CoreLocation.framework库.并且在.h文件中签订协议,和声明定位管理器变量.

 

@interface RootViewController : UIViewController <CLLocationManagerDelegate>{
       CLLocationManager *gpsManager; // 定位管理器
       UILabel *gpsLabel;
}
    接着在我们实现代码的过程中,我们可以先在view上添加两个按钮,一个控制开始定位,一个控制停止定位.并且添加一个label来显示定位的经纬度.
- (void)viewDidLoad
{
    [super viewDidLoad];
 // Do any additional setup after loading the view.
    // 加一个打开定位开关
    UIBarButtonItem *startItm = [[UIBarButtonItem alloc] initWithTitle:@"开始定位" style:UIBarButtonItemStylePlain target:self action:@selector(startLocation)];
    self.navigationItem.rightBarButtonItem = startItm;
    
    UIBarButtonItem *stopItm = [[UIBarButtonItem alloc] initWithTitle:@"停止定位" style:UIBarButtonItemStylePlain target:self action:@selector(stopLocation)];
    self.navigationItem.leftBarButtonItem = stopItm;
    gpsLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 320, 40)];
    gpsLabel.backgroundColor = [UIColor grayColor];
    gpsLabel.text = @"还没有经纬度";
    [self.view addSubview:gpsLabel];
}
接下来我们可以继续完成开始实现定位方法.
- (void) startLocation {
    // 1. 创建定位管理对象
    gpsManager = [[CLLocationManager alloc] init];
    // 2. 设置代理
    gpsManager.delegate = self;
    // 3. 设置定位精度 
    gpsManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
    // 4. 判断是否gps已经打开了
    if ([CLLocationManager locationServicesEnabled] == NO) {
        NSLog(@"你的gps还没有打开");
        return;
    }
    // 5. 开始定位
    [gpsManager startUpdatingLocation];
    
    // 打开罗盘定位,这个是罗盘定位,想要了解的可以自己研究,我只是提一下.
//    [gpsManager startUpdatingHeading];
    // 关闭罗盘
//    [gpsManager stopUpdatingHeading];
}
接着,当开始定位获取到新位置时就会调用下面的代理方法
#pragma mark - 获取定位数据代理函数
// 一旦这个函数调用了 那么表示位置发生变化了 最新位置在
// newLocation 之前的位置在oldLocation里面
- (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    
}
// 和上面函数一样的。表示gps位置发生变化了 就调用这个函数 这个函数传过来一个位置数组
// 这个位置数组表示里面最新的所有位置
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    for (CLLocation *oneLocation in locations) {
        NSLog(@"经纬度是 %f  %f",
              [oneLocation coordinate].latitude,
              [oneLocation coordinate].longitude);
        gpsLabel.text = [NSString stringWithFormat:@"%f,%f",
                         [oneLocation coordinate].latitude,
                         [oneLocation coordinate].longitude];
        }
    
}
- (void) locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
    
}
停止定位的方法里书写
 [gpsManager stopUpdatingLocation];就ok了.
当然定位功能只能在真机上进行测试,有条件的童鞋可以自己测试下.
至于地图显示,首先,我们需要导入MapKit.framework库.
声明一个地图显示空间变量
@interface RootViewController : UIViewController {
    MKMapView *myMapView; // 一个地图显示的控件
    // /xXXView
}
接着,我们要定制地图显示范围,和地图类型
- (void)viewDidLoad
{
    [super viewDidLoad];
 // Do any additional setup after loading the view.
    myMapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
//    myMapView.mapType = MKMapTypeSatellite; // 卫星地图
    // MKMapTypeStandard标准交通地图
    
    // 设置地图初始的区域:
    MKCoordinateRegion region;
    region.center.longitude = 116.351167;
    region.center.latitude = 40.035907;
    region.span.latitudeDelta = 0.01;
    region.span.longitudeDelta = 0.01;
    [myMapView setRegion:region];
    
    // 显示自己的位置
    myMapView.showsUserLocation = YES;
    
    [self.view addSubview:myMapView];
    // 如何放大缩小呢 是按住屏幕Option键
    
    // 加一个按钮 当前位置
    UIButton *b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    b.frame = CGRectMake(10, 400, 100, 40);
    [b setTitle:@"当前位置" forState:UIControlStateNormal];
    [b addTarget:self action:@selector(gotoMyselfLocation:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:b];
}
 接着就是定位自己当前位置,并在地图上显示
- (void) gotoMyselfLocation:(UIButton *)b {
    MKCoordinateRegion region;
    // 经纬度需要通过gps取得...通过地图取得当前位置坐标
    CLLocation *myselfLocation = myMapView.userLocation.location;
    
    region.center.longitude = [myselfLocation coordinate].longitude;
    region.center.latitude = [myselfLocation coordinate].latitude;
    region.span.latitudeDelta = 0.01;
    region.span.longitudeDelta = 0.01;
    [myMapView setRegion:region animated:YES];
}

 这个是地图的简单使用,当然当你定位到自己位置时,也需要在真机上才能测试.