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. Codeves 2800 送外卖 状态压缩DP+floyd

    送外卖     题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上.n个不同的客户分别在1~n个编号的城市中.送外卖的从0号城市出发,然后 ...

  2. 创建多线程的HttpClient

    在实际的应用中,我们的联网应用程序里应该有一个HttpClient,并将其用于所有的HTTP通信.这就可能在同一个Http Client同时发出多个请求,也就产生了多线程的问题.幸运的是,在HttpC ...

  3. How to remove focus without setting focus to another control?

    How to remove focus without setting focus to another control? Ask Question up vote 67 down vote favo ...

  4. 编写高质量的Makefile

    源地址 :http://blog.csdn.net/maopig/article/details/6801749 一.前言 回想自己的第一个Makefile,是这个样子的 CODE hello:hel ...

  5. Linq、延迟加载、直接加载

    1.集合常用扩展方法 Where.Max.Min.OrderBy. Select.//投影后的IEnumerable对象可以通过,AsQueryable转换数据类型 First.FirstOrDefa ...

  6. python课程设计笔记(一)开发环境配置

    今天开始学python,一个月后交成果?还是希望自己不要浮躁,认真地去学,有所付出也不期望太大回报. 现在还是一脸懵逼的状态,看着教程一点点来吧= = 毕竟我是最棒的最发光的阳光彩虹小白马! 1. 去 ...

  7. JavaScript DOM编程艺术(第2版)学习笔记2(4~6章应用实例)

    本书的第4章使用第3章学到的操作DOM的方法和属性写了一个展示图片的网页,并在第5,6章对代码进行了优化. 第一版,搭建网页的静态结构,包括一级标题<h1>,无序列表清单<ul> ...

  8. Oracle 合并查询

    8).合并查询有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号union,union all,intersect,minus.多用于数据量比较大的数据局库,运行速度快.1). ...

  9. Apache负载均衡配置

    使用mod_proxy 配置Apache负载均衡 1.安装apache ./configure --prefix=/usr/local/apache2 –enable-so make &&am ...

  10. Java并发--线程安全策略

    1 不可变对象 用不可变对象保证线程安全,是相当于不让线程并发,逃避了并发. 不可变对象就是指一个类的实例化对象不可变.比如String类的实例 主要方法有: 将类声明为final 将所有成员声明为 ...