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. 2014年湖北省TI杯大学生电子设计竞赛论文格式

    2014年湖北省TI杯大学生电子设计竞赛 B题:金属物体探測定位器(本科) 2014年8月15日 文件夹 1 系统方案 1.1 XXX的论证与选择........................... ...

  2. oracle存储过程的使用

    一. 使用for循环游标:遍历全部职位为经理的雇员 1. 定义游标(游标就是一个小集合) 2. 定义游标变量 3. 使用for循环游标 declare -- 定义游标c_job cursor c_jo ...

  3. http server优雅启停原理及验证

    问题背景 在 http应用程序重启时,如果直接 kill -9 使程序退出,然后再启动,会存在的问题: 旧的请求未处理完,如果服务端进程直接退出,会造成客户端连接中断(收到 RST) 新请求打过来,服 ...

  4. [转]Linux+XAMPP+eolinker开源版v3.2.4

    eolinker是一个由国人开源的接口管理系统(AMS),特性及介绍详见开源中国-eolinker首页. 搭建步骤参考:eolinker开源指南 系统环境:CentOS Linux release 7 ...

  5. 14. Longest Common Prefix[E]最长公共前缀

    题目 Write a function to find the longest common prefix string amongst an array of strings. If there i ...

  6. POJ 3660 Floyd传递闭包

    题意:牛有强弱,给出一些牛的强弱的胜负关系,问可以确定几头牛的排名. 思路: Floyd传递闭包 // by SiriusRen #include <bitset> #include &l ...

  7. FluentAPI关系映射配置

    都有哪几种关系? 1vs多,多vs多 1. 概念or关系映射相关方法: 1) 基本套路:this.Has***(o=>o.AAA).With***() 当前这个表和AAA属性的表关系是Has定义 ...

  8. C#获取URL参数值

    原文:C#获取URL参数值 在写程序的时候,我们经常需要对页面进行传参数,比如page?id=1234,那么在page这个页面中就直接可以使用string id = Request.QueryStri ...

  9. Kattis - How Many Digits?

    How Many Digits? Often times it is sufficient to know the rough size of a number, rather than its ex ...

  10. 粘包解决高端_Server

    from socket import * #导入套接字模块的所有命令import subprocess #导入subprocess模块,用于执行命令行import struct #导入struck模块 ...