1:加入库CoreLocation.framework,MApKit.framework;

2:@property (nonatomic, strong) CLLocationManager *locationManager;

@property (nonatomic, strong) MKMapView *mapView;

@property (nonatomic, strong) CLLocation *checkinLocation;

@property (strong, nonatomic) NSString *currentLatitude; //纬度

@property (strong, nonatomic) NSString *currentLongitude; //经度

- (void)viewDidLoad {

    [super viewDidLoad];

    self.title=@"地图";

    [self initRightBarButton];

    [self setupLocationManager];

    [self setupMapView];

}

-(void)initRightBarButton{

    UIButton* _btnRight = [UIButton buttonWithType:UIButtonTypeCustom];

    [_btnRight setFrame:CGRectMake(0, 0, 39, 34)];

    UIImage *imgNormal = [UIImage imageNamed:@"gpsbtn_dianji"];

    UIImage *imgSelect = [UIImage imageNamed:@"gpsbtn"];

    [_btnRight setBackgroundImage:imgNormal forState:UIControlStateNormal];

    [_btnRight setBackgroundImage:imgSelect forState:UIControlStateSelected];

    _btnRight.showsTouchWhenHighlighted = YES;

    [_btnRight addTarget:self action:@selector(showUserLocation:) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:_btnRight];

    self.navigationItem.rightBarButtonItem = buttonItem;

}

- (void)setupLocationManager{

    _locationManager=[[CLLocationManager alloc]init];

    _locationManager.desiredAccuracy=kCLLocationAccuracyBestForNavigation;

    //每隔多少米定位一次(这里的设置为不论什么的移动)

    _locationManager.distanceFilter=kCLDistanceFilterNone;

    //iOS 8.0以后

    if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {

        [self.locationManager requestWhenInUseAuthorization];

        [self.locationManager startUpdatingLocation];

    }

}

- (void)setupMapView{

    _mapView=[[MKMapView alloc]initWithFrame:self.view.bounds];

    [self.view addSubview:_mapView];

    _mapView.delegate=self;

    //用户位置追踪(用户位置追踪用于标记用户当前位置,此时会调用定位服务)

    _mapView.userTrackingMode=MKUserTrackingModeFollowWithHeading;

    _mapView.mapType=MKMapTypeStandard;

    [self initLocationData];

}

- (void)initLocationData{

    NSMutableArray *arr=[[NSMutableArray alloc]init];

    for (int i=0; i<1; i++) {

        CLLocationDegrees lat=[self.currentLatitude  doubleValue];

        CLLocationDegrees longi=[self.currentLongitude doubleValue];

        NSString *lacationName=@"当前位置";

        BasicMapAnnotation *anno=[[BasicMapAnnotation alloc]initWithLatitude:lat andLongitude:longi];

        anno.title=lacationName;

        anno.index=i;

        [arr addObject:anno];

    }

    [_mapView showAnnotations:arr animated:YES];

}

- (void)showUserLocation:(id)sender{

    MKCoordinateSpan span=MKCoordinateSpanMake(0.01, 0.02);

    MKCoordinateRegion region=MKCoordinateRegionMake(_mapView.userLocation.coordinate, span);

    [_mapView setRegion:region animated:YES];

}

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

    NSLog(@"纬度:%f 经度:%f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);

    self.currentLatitude  = [NSString stringWithFormat:@"%.4f",userLocation.location.coordinate.latitude];

    self.currentLongitude = [NSString stringWithFormat:@"%.4f",userLocation.location.coordinate.longitude];

    [self initLocationData];

    //设置地图显示范围(假设不进行区域设置会自己主动显示区域范围并指定当前用户位置为地图中心点)

    //MKCoordinateSpan span=MKCoordinateSpanMake(0.01, 0.01);

    //MKCoordinateRegion region=MKCoordinateRegionMake(_mapView.region.center, span);

    //[_mapView setRegion:region animated:true];

}

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

    if ([annotation isKindOfClass:[BasicMapAnnotation class]]) {

        static NSString *key=@"AnnotationKey";

        MKAnnotationView *annotationView=[_mapView dequeueReusableAnnotationViewWithIdentifier:key];

        BasicMapAnnotation *aa=(BasicMapAnnotation *)annotation;

        if (!annotationView) {

            annotationView=[[MKAnnotationView alloc]initWithAnnotation:aa reuseIdentifier:key];

            CGRect frame=annotationView.frame;

            frame.size.width=14;

            frame.size.height=35;

            annotationView.frame=frame;

            annotationView.canShowCallout=YES;

            UIImageView*imageview=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"地图标注"]];

            imageview.frame=frame;

            [annotationView addSubview:imageview];

        }

        return annotationView;

    }

    return nil;

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

}

iOS 系统地图实现及定位的更多相关文章

  1. iOS开发----地图与导航--定位和位置信息获取

    要实现地图.导航功能,往往需要先熟悉定位功能,在iOS中通过Core Location框架进行定位操作.Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图 ...

  2. IOS系统唤醒微信内置地图

    针对前一篇文章 唤醒微信内置地图 后来发现在IOS系统中运行 唤醒地图会无效的问题.因为在IOS上无法解析这俩个字符串的问题! 需要对经纬度 使用 “parseFloat()”进行转换 返回一个浮点数 ...

  3. 检测iOS系统的定位服务

    [CLLocationManager locationServicesEnabled]检测的是整个iOS系统的位置服务开关

  4. iOS 系统架构

    https://developer.apple.com/library/ios/documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/ ...

  5. iOS原生地图开发详解

    在上一篇博客中:http://my.oschina.net/u/2340880/blog/414760.对iOS中的定位服务进行了详细的介绍与参数说明,在开发中,地位服务往往与地图框架结合使用,这篇博 ...

  6. IOS系统框架

    IOS系统框架:ios架构号MAC OS的基础框架相似:ios扮演底层硬件和应用程序的中介,底层为所有应用程序提供基础服务,高层则包含一些复杂巧妙的技术和服务,并且创建的应用程序不能直接访问硬件. C ...

  7. 苹果iOS系统下检查第三方APP是否安装及跳转启动

    在iOS系统,使用Url Scheme框架在APP间互相跳转和传递数据,本文只介绍如果检测和跳转. Url Scheme框架 如果你想知道ios设备中是否安装QQ这个软件,我们可以通过一个简单方法判断 ...

  8. iOS系统层次架构

    本文转自:http://blog.csdn.net/lxl_815520/article/details/51172917 一,概述 iOS的系统架构分为四个层次:核心操作系统层(Core OS la ...

  9. 认识iOS系统架构

    关于本文: 文章主要介绍iOS系统架构中的四层结构的内容.常用的框架.大致的功能,然后对iOS开发人员的发展提出自己的一些拙见. 一.iOS系统是基于UNIX系统,所有从系统稳定性上来说的确比其他操作 ...

随机推荐

  1. jenkins启动失败

    一:http://localhost:8080已经可以进了 二:修改端口 只是因为8080端口已经有程序占用了,需要修改端口号,但是在jenkins.xml文件中修改端口号,并不起作用. 解决方法是: ...

  2. 0x20 搜索

    这里基本就是入门吧. 可达性统计 用bitset搞的判重,发现这东西是真好用哈,空间还小 #include<cstdio> #include<iostream> #includ ...

  3. kentico7中设置网站的主页

    打开SiteManager,选择Settings,然后左上角选择具体的网站,Content,Web Site Content,Default alias path

  4. php静态函数的使用场景

    php静态函数的使用场景 场景 代码 <?php class Conductor{ public static $i = 100; public function sold(){ $a = se ...

  5. [MySQL] 统计函数记录

    时间段统计========== 按年汇总,统计:select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by ...

  6. vue --- 关于多个router-view视图组件,渲染同一页面

    vue.js多视图的使用,可以提高网页组件化,模块化 比如使用多视图,可以将网站页面封装header.footer.navbar等多个公共部分, 遇到修改公共部分的文案信息等数据的时候,不再需要逐一修 ...

  7. Redis学习笔记(十) 命令进阶:事务操作

    原文链接:http://doc.redisfans.com/transaction/index.html Redis中也提供了对于事务的支持,由于Redis是单线程处理Client的请求,所以实现起来 ...

  8. Redis学习笔记(二) Redis 数据类型

    Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...

  9. mac下安装postgreSql

    在 mac 下,可以利用 homebrew 直接安装 PostgreSQL: 1 brew install postgresql -v 稍等片刻,PostgreSQL 就安装完成.接下来就是初始数据库 ...

  10. php-fpm配置笔记

    php-fpm配置不当,导致服务器经常出现502错误,上个学期多次调整都没有解决,网上找来资料,大都是增加max_children,可是我都加到顶了,php-fpm log里面还是有大量的警告: ee ...