我的编程空间,编程开发者的网络收藏夹
学习永远不晚

iOS开发中最基本的位置功能实现示例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

iOS开发中最基本的位置功能实现示例

定位获取位置及位置编码-反编码 我们的应用程序,可以通过添加Core Location框架所包含的类,获取设备的地图位置。 添加CoreLocation.framework框架,导入#import<CoreLocation/CoreLocation.h>。 使用地图服务时,会消耗更多地设备电量.因此,在获取到设备的位置后,应该停止定位来节省电量。 我们通过一个demo来展示内容与效果

// // HMTRootViewController.h // My-GPS-Map // // Created by hmt on 14-4-12. // Copyright (c) 2014年 胡明涛. All rights reserved. // #import <UIKit/UIKit.h> @interface HMTRootViewController : UIViewController <CLLocationManagerDelegate> @end // // HMTRootViewController.m // My-GPS-Map // // Created by hmt on 14-4-12. // Copyright (c) 2014年 胡明涛. All rights reserved. // #import "HMTRootViewController.h" #import <AddressBook/AddressBook.h> @interface HMTRootViewController (){ CLLocationManager * _locationManage; } @property (nonatomic,retain) CLLocationManager * locationManage; @end @implementation HMTRootViewController - (void)dealloc{ RELEASE_SAFELY(_locationManage); [super dealloc]; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self createGPSMap]; self.view.backgroundColor = [UIColor redColor]; } - (void)createGPSMap{ // 初始化位置服务 self.locationManage = [[CLLocationManager alloc]init]; // 要求CLLocationManager对象返回全部信息 _locationManage.distanceFilter = kCLDistanceFilterNone; // 设置定位精度 _locationManage.desiredAccuracy = kCLLocationAccuracyBest; // 设置代理 _locationManage.delegate = self; // 开始定位 [_locationManage startUpdatingLocation]; [_locationManage release]; } - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ CLLocation * newLocation = [locations lastObject]; // 停止实时定位 [_locationManage stopUpdatingLocation]; // 取得经纬度 CLLocationCoordinate2D coord2D = newLocation.coordinate; double latitude = coord2D.latitude; double longitude = coord2D.longitude; NSLog(@"纬度 = %f 经度 = %f",latitude,longitude); // 取得精度 CLLocationAccuracy horizontal = newLocation.horizontalAccuracy; CLLocationAccuracy vertical = newLocation.verticalAccuracy; NSLog(@"水平方 = %f 垂直方 = %f",horizontal,vertical); // 取得高度 CLLocationDistance altitude = newLocation.altitude; NSLog(@"%f",altitude); // 取得此时时刻 NSDate *timestamp = [newLocation timestamp]; // 实例化一个NSDateFormatter对象 NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init]; // 设定时间格式 [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss a"]; [dateFormat setAMSymbol:@"AM"]; // 显示中文, 改成"上午" [dateFormat setPMSymbol:@"PM"]; // 求出当天的时间字符串,当更改时间格式时,时间字符串也能随之改变 NSString *dateString = [dateFormat stringFromDate:timestamp]; NSLog(@"此时此刻时间 = %@",dateString); // -----------------------------------------位置反编码-------------------------------------------- CLGeocoder * geocoder = [[CLGeocoder alloc]init]; [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) { for (CLPlacemark * place in placemarks) { NSLog(@"name = %@",place.name); // 位置名 NSLog(@"thoroughfare = %@",place.thoroughfare); // 街道 NSLog(@"subAdministrativeArea = %@",place.subAdministrativeArea); // 子街道 NSLog(@"locality = %@",place.locality); // 市 NSLog(@"subLocality = %@",place.subLocality); // 区 NSLog(@"country = %@",place.country); // 国家 NSArray *allKeys = place.addressDictionary.allKeys; for (NSString *key in allKeys) { NSLog(@"key = %@, value = %@",key, place.addressDictionary[key]); } #pragma mark - 使用系统定义的字符串直接查询,记得导入AddressBook框架 NSLog(@"kABPersonAddressCityKey = %@", (NSString *)kABPersonAddressCityKey); NSLog(@"city = %@", place.addressDictionary[(NSString *)kABPersonAddressCityKey]); NSString *city = place.locality; if(city == nil) { city = place.addressDictionary[(NSString *)kABPersonAddressStateKey]; } } }]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
程序运行结果:(以39.3,116.4为例)

//  判断输入的地址  if (self.locationTextField.text == nil  ||  [self.locationTextField.text length] == 0) {      return;  }    CLGeocoder *geocoder = [[CLGeocoder alloc] init];    [geocoder geocodeAddressString:_locationTextField.text completionHandler:^(NSArray *placemarks, NSError *error) {            for (CLPlacemark *placemark in placemarks) {                    CLLocationCoordinate2D coordinate = placemark.location.coordinate;          NSString *strCoordinate = [NSString stringWithFormat:@"纬度 = %3.5f\n 经度 = %3.5f",coordinate.latitude,coordinate.longitude];          NSLog(@"%@",strCoordinate);          NSDictionary *addressDictionary = placemark.addressDictionary;          NSString *address = [addressDictionary objectForKey:(NSString *)kABPersonAddressStreetKey];          NSString *state = [addressDictionary objectForKey:(NSString *)kABPersonAddressStateKey];          NSString *city = [addressDictionary objectForKey:(NSString *)kABPersonAddressCityKey];          NSLog(@"街道 = %@\n 省 = %@\n 城市 = %@",address,state,city);      }  }]; 

地图的使用以及标注地图 使用CoreLocation框架获取了当前设备的位置,这一章介绍地图的使用。 首先,导入<MapKit.framework>框架:

#import <MapKit/MapKit.h>
main代码示例

main.h    #import <UIKit/UIKit.h>  #import <MapKit/MapKit.h>  //  引用地图协议  @interface HMTMainViewController : UIViewController<MKMapViewDelegate>    @end    main.m    //  //  HMTMainViewController.m  //  Map  //  //  Created by HMT on 14-6-21.  //  Copyright (c) 2014年 humingtao. All rights reserved.  //    #import "HMTMainViewController.h"  #import "HMTAnnotation.h"    @interface HMTMainViewController ()    @property (nonatomic ,strong) MKMapView *mapView;    @end    @implementation HMTMainViewController    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  {      self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];      if (self) {          // Custom initialization      }      return self;  }    - (void)viewDidLoad    {            [super viewDidLoad];      self.view.backgroundColor = [UIColor redColor];            // Do any additional setup after loading the view.            self.navigationItem.title = @"地图标注";      self.mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];            //  是否显示用户当前位置      self.mapView.showsUserLocation = YES;      //  设置代理      self.mapView.delegate = self;            //  地图显示类型            self.mapView.mapType = MKMapTypeStandard;      //  经纬度      CLLocationCoordinate2D coord2D = {39.910650,116.47030};      //  显示范围,数值越大,范围就越大      MKCoordinateSpan span = {0.1,0.1};      //  显示区域      MKCoordinateRegion region = {coord2D,span};      //  给地图设置显示区域      [self.mapView setRegion:region animated:YES];      //  是否允许缩放      //self.mapView.zoomEnabled = NO;      //  是否允许滚动      //self.mapView.scrollEnabled = NO;        //  初始化自定义Annotation(可以设置多个)      HMTAnnotation *annotation = [[HMTAnnotation alloc] initWithCGLocation:coord2D];      //  设置标题      annotation.title = @"自定义标注位置";      //  设置子标题      annotation.subtitle = @"子标题";      //  将标注添加到地图上(执行这步,就会执行下面的代理方法viewForAnnotation)      [self.mapView addAnnotation:annotation];            [self.view addSubview:_mapView];        }    //   返回标注视图(大头针视图)  - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{              static NSString *identifier = @"annotation";      //  复用标注视图(MKPinAnnotationView是大头针视图,继承自MKAnnotation)      MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];      if (annotationView == nil) {          annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];      }      //  判断是否为自定义的标注视图      if ([annotation isKindOfClass:[HMTAnnotation class]]) {                    //  设置大头针圆圈颜色          annotationView.pinColor = MKPinAnnotationColorGreen;          //  点击头针红色圆圈是否显示上面设置好的标题视图          annotationView.canShowCallout = YES;          //  要自定义锚点图片,可考虑使用MKAnnotationView;MKPinAnnotationView只能是以大头针形式显示!!!!          annotationView.image = [UIImage imageNamed:@"customImage"];          //  添加标题视图右边视图(还有左边视图,具体可自行查看API)          UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];          [button addTarget:self action:@selector(didClickAnnotationViewRightButtonAction:) forControlEvents:UIControlEventTouchUpInside];          annotationView.rightCalloutAccessoryView = button;          //  是否以动画形式显示标注(从天而降)          annotationView.animatesDrop = YES;          annotationView.annotation = annotation;                    //  返回自定义的标注视图          return annotationView;                }else{                   //  当前设备位置的标注视图,返回nil,当前位置会创建一个默认的标注视图          return nil;      }        }    - (void)didClickAnnotationViewRightButtonAction:(UIButton *)button{        NSLog(@"%d %s",__LINE__,__FUNCTION__);  }    //  更新当前位置调用  - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{        NSLog(@"%d %s",__LINE__,__FUNCTION__);  }    //  选中标注视图  - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{            NSLog(@"%d %s",__LINE__,__FUNCTION__);  }    //  地图的现实区域改变了调用  - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{        NSLog(@"%d %s",__LINE__,__FUNCTION__);  }    - (void)didReceiveMemoryWarning  {      [super didReceiveMemoryWarning];      // Dispose of any resources that can be recreated.  }    @end 

自定义MKAnnotationView

#import <Foundation/Foundation.h>  #import <MapKit/MapKit.h>  //  引入MKAnnotation协议,切记不能忘记!!!!!!!!!  @interface HMTAnnotation : NSObject<MKAnnotation>    @property (nonatomic,readonly) CLLocationCoordinate2D coordinate;  //  坐标  @property (nonatomic,copy) NSString *title;     //  位置名称  @property (nonatomic,copy) NSString *subtitle;  //  位置子信息(可选)    - (id)initWithCGLocation:(CLLocationCoordinate2D) coordinate;    @end    #import "HMTAnnotation.h"    @implementation HMTAnnotation    - (id)initWithCGLocation:(CLLocationCoordinate2D)coordinate{        if (self = [super init]) {                    _coordinate = coordinate;      }      return self;  }    @end 

效果图:

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

iOS开发中最基本的位置功能实现示例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

iOS开发中最基本的位置功能实现示例

定位获取位置及位置编码-反编码 我们的应用程序,可以通过添加Core Location框架所包含的类,获取设备的地图位置。 添加CoreLocation.framework框架,导入#import
2022-05-21

iOS实现模拟定位功能的示例代码

前言App中越来越多的功能依赖用户实际的位置,例如基于用户位置提供推荐数据、基于定位判断某些功能是否可用,但是在开发调试中XCode却没有提供自定义的模拟定位的功能,所以本文主要的目的是现实一个可以在开发调试过程中随时模拟定位的功能。思路我
2022-05-16

Android中实现基本的短信拦截功能的代码示例

要点 1.在Manifest.xml里加"接收"SMS的权限2.在Manife
2022-06-06

iOS 11开发中iOS11应用视图位置和大小的示例分析

这篇文章主要介绍iOS 11开发中iOS11应用视图位置和大小的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!当一个视图使用拖动的方式添加到主视图后,它的位置和大小可以使用拖动的方式进行设置,也可以使用尺寸检
2023-06-04

iOS开发中实现邮件和短信发送的简单示例

发送邮件 1.导入库文件:MessageUI.framework 2.引入头文件 3.实现代理
2022-05-26

Android开发基础实现最简单的视频播放示例

这篇文章主要为大家介绍了Android开发基础实现最简单的视频播放示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-05

Android开发实现的简单媒体播放器功能示例

本文实例讲述了Android开发实现的简单媒体播放器功能。分享给大家供大家参考,具体如下:一、概述:因为播放视频需要很大的内存,所以必须使用surfaceview ,surfaceview 里实现了双缓冲的功能,二、全部代码:/** * @
2023-05-30

Android编程实现支持拖动改变位置的图片中叠加文字功能示例

本文实例讲述了Android编程实现支持拖动改变位置的图片中叠加文字功能。分享给大家供大家参考,具体如下: 之所以做了这么一个Demo,是因为最近项目中有一个奇葩的需求:用户拍摄照片后,分享到微信的同时添加备注,想获取用户在微信的弹出框输入
2022-06-06

android开发中如何实现一个定位与目的地导航功能

本篇文章为大家展示了android开发中如何实现一个定位与目的地导航功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。效果: 进入后首先会得到当前位置,在地图上显示出来,在输入框中输入
2023-05-31

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录