iOS地图的使用

前言:让有需要的人看一眼,如果能得到一些自己需要的,我将倍感荣幸.

注意###

如果用storyBoard的mapView要导入MapKit的framework.因为Xcode5以后,系统会自己导入框架,但是storyBoard要先于代码执行.所以要先导入框架.
如果一切弄好了,发现定位错了,改一下当前定位的位置
simulator的Debug->location->customer location -> 39,116(随便写,别写出国去,台湾是中国的一个省)
可以cmd R 运行一下 看一眼 然后进行下面的代码

设置地图类型###

//地图视图
@property (weak, nonatomic) IBOutlet MKMapView *mapView;

/*
    //标准
    MKMapTypeStandard = 0,
    //卫星
    MKMapTypeSatellite,
    //鸟瞰
    MKMapTypeHybrid,
    //以下两个暂时国内没用到
    MKMapTypeSatelliteFlyover ,
    MKMapTypeHybridFlyover ,
    */
    self.mapView.mapType = MKMapTypeStandard;
    //实时交通状况
    // Affects MKMapTypeStandard and MKMapTypeHybrid(意思是只能在标准和鸟瞰下使用)
    self.mapView.showsTraffic = true;
   //显示用户位置
    /*
     不跟踪
     MKUserTrackingModeNone = 0,
     跟踪
     MKUserTrackingModeFollow,
     有方向的跟踪
     MKUserTrackingModeFollowWithHeading
     */
    self.mapView.userTrackingMode = MKUserTrackingModeFollow;
    //定位必须授权  别忘了info.plist文件,key不要写错
    self.locationManager = [CLLocationManager new];
    [self.locationManager requestWhenInUseAuthorization];
   //有可能用模拟器出不来交通状况,用真机则没有这些情况,应该是模拟器的一些bug.

点击定位的蓝色光圈显示真实位置###

现在点击蓝色光圈,显示的是My Location 不想要这个,想要具体位置
我在代码块里面标注123,显示的会清晰一些 所用代码还是上面的代码块,进行添加

//点击蓝色光圈 显示具体位置 步骤
    //1.设置地图代理
    self.mapView.delegate = self;
   //2.遵循协议 <MKMapViewDelegate>
   //3.实现方法
//代理方法---定位到用户位置  会调用(也就是userLocation -->大头针(有时间 会另起一章写一下看心情= =))
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
//点击MKUserLocation 进去找到 title和subTitle的属性 先设置一下,看看效果如何
//    userLocation.title = @"北京市";
//    userLocation.subtitle = @"天安门";
//可以进行修改,查找正确
    //cmd 点击 MKUserLocation 进去再查找所需要属性  发现 @property (readonly, nonatomic, nullable) CLLocation *location; 有位置  可以进行反地理编码
    //反地理编码 步骤走一波
//1.创建对象
    CLGeocoder *gecoder = [CLGeocoder new];
//2.调用方法
    [gecoder reverseGeocodeLocation:userLocation.location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
//防错
        if (error) {
            NSLog(@"%@",error);
            return;
        }
//赋值
        userLocation.title = placemarks[0].locality;
        userLocation.subtitle = placemarks[0].name;
    }];
}
//当网速慢的时候,要等一会,如果就是不想要My Location就把那两个title设置为正在加载,怎么开心怎么玩.

点击按钮 返回定位位置###

玩过地图的都知道 你找地方的时候,有个按钮 点一下就能回到最初的定位位置
用此方法可以回到当前位置,前提不放大不缩小 因为方法会以你最后一次的比例尺为标准 恢复到定位位置 我们需要的是 一开始的比例尺的定位

//拖线方法
- (IBAction)backAction {
    //将用户的位置  设置为地图的中心点的经纬度
    self.mapView.centerCoordinate = self.mapView.userLocation.coordinate;
}

改善 发现问题 2.0给的不对,确实用的是2.0的比例尺,但是和一开始的定位不对,肯定就是span的错了,那么想法弄到最原始的span的两个值就搞定

- (IBAction)backAction {
    //将用户的位置  设置为地图的中心点的经纬度
    self.mapView.centerCoordinate = self.mapView.userLocation.coordinate;
    //改善  确定区域:1.中心点经纬度 2.经纬度跨度
    /*
     region:
     跨度结构体(span):
     typedef struct {
     CLLocationDegrees latitudeDelta;
     CLLocationDegrees longitudeDelta;
     } MKCoordinateSpan;
     //区域结构体(region)
     typedef struct {
     CLLocationCoordinate2D center;
     MKCoordinateSpan span;
     } MKCoordinateRegion;
     
     */
    //跨度 CLLocationDegrees latitudeDelta = double
    MKCoordinateSpan span = MKCoordinateSpanMake(2.0, 2.0);
    //给mapView的region赋值
    self.mapView.region = MKCoordinateRegionMake(self.mapView.userLocation.location.coordinate, span);
}

求地图定位的时候span两个值的大小 想都不用想 肯定是代理方法

//地图区域一旦改变 就会调用
-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
    NSLog(@"longitudeDelta = %f,latitudeDelta = %f",self.mapView.region.span.longitudeDelta,self.mapView.region.span.latitudeDelta);
}
打印出来得出结果  longitudeDelta = 0.015407,latitudeDelta = 0.021045 这就是我们需要的两个span值 
修改span
MKCoordinateSpan span = MKCoordinateSpanMake(0.015407, 0.021045);

缩小地图 span的两个值就变大 放大就变小 比例尺吗 越清晰表明比例越小

变化的时候让其有动画效果--要用动画的时候,先看看有没有系统自己的,系统的无非都是set带动画,找一下,如果还没有,自己加一个动画,我前面写过UIView的那些动画,这里都可以用上.

[self.mapView setRegion:MKCoordinateRegionMake(self.mapView.userLocation.location.coordinate, span) animated:true];

增加放大缩小按钮###

拖线方法

//改变地图大小的按钮
- (IBAction)changeMap:(UIButton *)sender {
    switch (sender.tag) {
        case 1:{//放大 地图的跨度中的经纬度 * 0.5
            //修改当前跨度
            //纬度跨度
            CGFloat latitudeDelta = self.mapView.region.span.latitudeDelta * 0.5;
            //经度跨度
            CGFloat longitudeDelta = self.mapView.region.span.longitudeDelta * 0.5;
            MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
            [self.mapView setRegion:MKCoordinateRegionMake(self.mapView.centerCoordinate, span) animated:true];
            
            break;
        }
        case 2:{//缩小 地图的跨度中的经纬度 * 2
            //修改当前跨度
            //纬度跨度
            CGFloat latitudeDelta = self.mapView.region.span.latitudeDelta * 2;
            //经度跨度
            CGFloat longitudeDelta = self.mapView.region.span.longitudeDelta * 2;
            MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
            [self.mapView setRegion:MKCoordinateRegionMake(self.mapView.centerCoordinate, span) animated:true];
            break;
        }
        default:
            break;
    }
}

这里重点有两个 1,你要确定的中心点位置,千万不要写成self.mapView.userLocation.coordinate这个,你是以当前用户定位所在为中心点,你看别处的时候相放大就会回到定位位置,所以你要清晰的知道 中心点是当前地图的中心self.mapView.centerCoordinate 2,还是放大缩小比例尺的逻辑问题,错了没事,弄错只会相反嘛,改过就是了.

本文不针对任何学术性研究,单纯为了娱乐.看不惯我就直说,反正我不改.

宝剑锋从磨砺出,梅花香自苦寒来.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容