- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章讲解iOS开发中基本的定位功能实现由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、简单说明 。
1.cllocationmanager cllocationmanager的常用操作和属性 开始用户定位- (void)startupdatinglocation; 停止用户定位- (void) stopupdatinglocation; 说明:当调用了startupdatinglocation方法后,就开始不断地定位用户的位置,中途会频繁地调用代理的下面方法 。
每隔多少米定位一次 。
定位精确度(越精确就越耗电) 。
2.cllocation cllocation用来表示某个位置的地理信息,比如经纬度、海拔等等 (1)经纬度 。
(2)海拔 。
(3)路线,航向(取值范围是0.0° ~ 359.9°,0.0°代表真北方向) 。
(4)行走速度(单位是m/s) 。
(5)计算2个位置之间的距离 。
3.cllocationcoordinate2d cllocationcoordinate2d是一个用来表示经纬度的结构体,定义如下 。
一般用cllocationcoordinate2dmake函数来创建cllocationcoordinate2d 2、代码示例 。
// // yyviewcontroller.m // 18-定位服务 // // created by apple on 14-8-9. // copyright (c) 2014年 yangyong. all rights reserved. // 。
。
#import "yyviewcontroller.h" #import <corelocation/corelocation.h> 。
//需要遵守cllocationmanagerdelegate协议 @interface yyviewcontroller ()<cllocationmanagerdelegate> @property(nonatomic,strong)cllocationmanager *locmgr; @end 。
@implementation yyviewcontroller #pragma mark-懒加载 -(cllocationmanager *)locmgr { if (_locmgr==nil) { //1.创建位置管理器(定位用户的位置) self.locmgr=[[cllocationmanager alloc]init]; //2.设置代理 self.locmgr.delegate=self; } return _locmgr; } - (void)viewdidload { [super viewdidload]; //判断用户定位服务是否开启 if ([cllocationmanager locationservicesenabled]) { //开始定位用户的位置 [self.locmgr startupdatinglocation]; //每隔多少米定位一次(这里的设置为任何的移动) self.locmgr.distancefilter=kcldistancefilternone; //设置定位的精准度,一般精准度越高,越耗电(这里设置为精准度最高的,适用于导航应用) self.locmgr.desiredaccuracy=kcllocationaccuracybestfornavigation; }else {//不能定位用户的位置 //1.提醒用户检查当前的网络状况 //2.提醒用户打开定位开关 } //测试方法,计算两个位置之间的距离 [self countdistance]; } 。
#pragma mark-cllocationmanagerdelegate /** * 当定位到用户的位置时,就会调用(调用的频率比较频繁) */ -(void)locationmanager:(cllocationmanager *)manager didupdatelocations:(nsarray *)locations { //locations数组里边存放的是cllocation对象,一个cllocation对象就代表着一个位置 cllocation *loc = [locations firstobject]; //维度:loc.coordinate.latitude //经度:loc.coordinate.longitude nslog(@"纬度=%f,经度=%f",loc.coordinate.latitude,loc.coordinate.longitude); nslog(@"%d",locations.count); //停止更新位置(如果定位服务不需要实时更新的话,那么应该停止位置的更新) // [self.locmgr stopupdatinglocation]; } 。
//计算两个位置之间的距离 -(void)countdistance { //根据经纬度创建两个位置对象 cllocation *loc1=[[cllocation alloc]initwithlatitude:40 longitude:116]; cllocation *loc2=[[cllocation alloc]initwithlatitude:41 longitude:116]; //计算两个位置之间的距离 cllocationdistance distance=[loc1 distancefromlocation:loc2]; nslog(@"(%@)和(%@)的距离=%fm",loc1,loc2,distance); } 。
@end 。
打印查看: 代码说明: 1.关于代理方法 需要设置代理,通过代理告诉用户当前的位置,有两个代理方法: locations参数里面装着cllocation对象 。
。
其中后者是一个过期的方法,在新的方法(第一个)中使用了一个数组来替代。 说明:该方法在当定位到用户的位置时就会调用,调用比较频繁 注意:不要使用局部变量(创建位置管理器),因为局部变量的方法结束它就被销毁了。建议使用一个全局的变量,且只创建一次就可以了(使用懒加载)。 2.定位的精度 3.如果发现自己的定位服务没有打开,那么应该提醒用户打开定位服务功能。 4.定位服务是比较耗电的,如果是做定位服务(没必要实时更新的话),那么定位了用户位置后,应该停止更新位置。 3、用户隐私的保护 。
1.权限设置说明 从ios 6开始,苹果在保护用户隐私方面做了很大的加强,以下操作都必须经过用户批准授权 (1)要想获得用户的位置 (2)想访问用户的通讯录、日历、相机、相册等 当想访问用户的隐私信息时,系统会自动弹出一个对话框让用户授权 注意:一旦用户选择了“don't allow”,意味着你的应用以后就无法使用定位功能,且当用户第一次选择了之后,以后就再也不会提醒进行设置。 因此在程序中应该进行判断,如果发现自己的定位服务没有打开,那么应该提醒用户打开定位服务功能。 cllocationmanager有个类方法可以判断当前应用的定位功能是否可用+ (bool)locationservicesenabled; 常用的方法:截图告诉用户,应该怎么打开授权 2.开发者可以在info.plist中设置nslocationusagedescription说明定位的目的(privacy - location usage description) 说明:这里的定位服务是基于网络的。通常定位服务可以是基于gps、基站或者是网络的.
4、ios8以来的改进 ios 8 还提供了更加人性化的定位服务选项。app 的定位服务不再仅仅是关闭或打开,现在,定位服务的启用提供了三个选项,「永不」「使用应用程序期间」和「始终」。同时,考虑到能耗问题,如果一款 app 要求始终能在后台开启定位服务,ios 8 不仅会在首次打开 app 时主动向你询问,还会在日常使用中弹窗提醒你该 app 一直在后台使用定位服务,并询问你是否继续允许。在ios7及以前的版本,如果在应用程序中使用定位服务只要在程序中调用startupdatinglocation方法应用就会询问用户是否允许此应用是否允许使用定位服务,同时在提示过程中可以通过在info.plist中配置通过配置privacy - location usage description告诉用户使用的目的,同时这个配置是可选的。 但是在ios8中配置配置项发生了变化,可以通过配置nslocationalwaysusagedescription或者nslocationwheninuseusagedescription来告诉用户使用定位服务的目的,并且注意这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,除非安装后自己设置此应用的定位服务。同时,在应用程序中需要根据配置对requestalwaysauthorization或locationservicesenabled方法进行请求。由于本人机器已经更新到最新的ios8.1下面的内容主要针对ios8,使用ios7的朋友需要稍作调整.
// // kcmainviewcontroller.m // corelocation // // created by kenshin cui on 14-03-27. // copyright (c) 2014年 kenshin cui. all rights reserved. // 。
。
#import "kcmainviewcontroller.h" #import <corelocation/corelocation.h> 。
@interface kcmainviewcontroller ()<cllocationmanagerdelegate>{ 。
cllocationmanager *_locationmanager; } 。
@end 。
@implementation kcmainviewcontroller 。
- (void)viewdidload { [super viewdidload]; //定位管理器 _locationmanager=[[cllocationmanager alloc]init]; if (![cllocationmanager locationservicesenabled]) { nslog(@"定位服务当前可能尚未打开,请设置打开!"); return; } //如果没有授权则请求用户授权 if ([cllocationmanager authorizationstatus]==kclauthorizationstatusnotdetermined){ [_locationmanager requestwheninuseauthorization]; }else if([cllocationmanager authorizationstatus]==kclauthorizationstatusauthorizedwheninuse){ //设置代理 _locationmanager.delegate=self; //设置定位精度 _locationmanager.desiredaccuracy=kcllocationaccuracybest; //定位频率,每隔多少米定位一次 cllocationdistance distance=10.0;//十米定位一次 _locationmanager.distancefilter=distance; //启动跟踪定位 [_locationmanager startupdatinglocation]; } } 。
#pragma mark - corelocation 代理 #pragma mark 跟踪定位代理方法,每次位置发生变化即会执行(只要定位到相应位置) //可以通过模拟器设置一个虚拟位置,否则在模拟器中无法调用此方法 -(void)locationmanager:(cllocationmanager *)manager didupdatelocations:(nsarray *)locations{ cllocation *location=[locations firstobject];//取出第一个位置 cllocationcoordinate2d coordinate=location.coordinate;//位置坐标 nslog(@"经度:%f,纬度:%f,海拔:%f,航向:%f,行走速度:%f",coordinate.longitude,coordinate.latitude,location.altitude,location.course,location.speed); //如果不需要实时定位,使用完即使关闭定位服务 [_locationmanager stopupdatinglocation]; } 。
@end 。
注意: 1.定位频率和定位精度并不应当越精确越好,需要视实际情况而定,因为越精确越耗性能,也就越费电。 2.定位成功后会根据设置情况频繁调用-(void)locationmanager:(cllocationmanager *)manager didupdatelocations:(nsarray *)locations方法,这个方法返回一组地理位置对象数组,每个元素一个cllocation代表地理位置信息(包含经度、纬度、海报、行走速度等信息),之所以返回数组是因为有些时候一个位置点可能包含多个位置。 3.使用完定位服务后如果不需要实时监控应该立即关闭定位服务以节省资源。 4.除了提供定位功能,cllocationmanager还可以调用startmonitoringforregion:方法对指定区域进行监控.
最后此篇关于讲解iOS开发中基本的定位功能实现的文章就讲到这里了,如果你想了解更多关于讲解iOS开发中基本的定位功能实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我必须从我的网站中删除()一些iem,然后将它们追加()回来,但是当我追加它们时,它们出现在不同的地方,而我希望它们完全显示在它们以前的同一个地方是。 有什么解决办法吗? 这是一个沙箱,请随意更新(注
一个。图片 (960x7)b. div(宽度:960,填充:10) 我想定位 (a),使其距顶部 50 像素,居中。我想将 (b) 放置在 (a) 的正下方,没有空格。 我的 CSS 如下: @cha
放置某物的正确方法是什么?我有一个在中心显示博客文章的 div。 "" rel="bookmark"> BY LOUIS MOORE ON " pubdate>
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭1
我已经成功地使用了 position:fixed 设置 CSS/CSS3 并且工作得很好! 我几天前看到了这个,想知道他们是如何实现向下滚动时发生的效果的,菜单栏在滚动前处于一个位置,然后转到顶部并自
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improv
接口定义 能够对于文字、段落乃至任何元素的精准定位 并做出增删改查,都是在开发一款富文本编辑器时一项最基本也是最重要的功能之一。让我们先来看看Slate中对于如何在文档树中定位元素是怎么定义的
例如,使用 WPF 在选项卡控件的最左上角定位三个 tabitem 和在最右上角定位一个 tabitem 的正确方法是什么? 我尝试通过更改边距将第四个 tabitem 向右移动,但这并没有产生好的结
我正在尝试使用 Javascript 创建一个跟随鼠标在页面上移动的东西。我希望它是米老鼠,我希望他的眼睛跟随鼠标移动他的眼球...这是我到目前为止的代码(从网络上的各个地方收集,因此归功于编写该部分
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 9 年前。 Improve
我试图将两个按钮放置在左上角。但它们始终位于顶部中心。 我已经尝试过这个: jp = new JPanel(); jp.setLayout(new GridBagLayout()); GridBagC
我在使用 JQuery 向下滑动功能时遇到问题。我可以让它正常工作,但是我向下滑动的元素的位置会根据视口(viewport)的大小而变化。我想做的是将它与它滑动的元素联系起来。 This JSfidd
我正在尝试创建一个棋盘,并将其放置在屏幕中间,但到目前为止我无法将它直接放在中间。我不想将位置硬编码到屏幕上,因为我要处理不同的屏幕尺寸。 var winsize = cc.director.
我正在尝试从 mysql 中的 2 个字符串点之间提取数据,我的示例脚本是 'otherdata&p1=textneeded&otherdata' 我需要拉出“textneeded”位,“P1=”是起
如何在 JavaFX 中设置按钮的位置?我的代码: bZero = new Button(); bZero.setPrefSize(45, 20); mainPane.getChildren().ad
我有一个 iPhone 应用程序,我可以在其中显示一系列图像。当用户点击图像时,我需要将该图像带到第一个位置,表明它是所选图像。我可以通过子类化实现 uiscrollview 中的点击。但是我无法将
在下图中,它显示了一个image、textbox 和一个css menu image 我的 CSS 菜单非常完美。我终于按照我需要的方式得到了它。我的问题是我需要导航栏中央的文本框,然后我需要我的图像
我必须创建一个看起来像这样的 div id为2的div应该出现在图片的右下角,图片的大小不固定id=2的div应该应用什么css id =1 的 div 没有定义位置,所以使用默认值,图像也是
如何将我的文本和图像对齐在同一行? 每当我使用 padding 或 margins 时,它就会崩溃到我正在使用的圆形图像中。 #alignPhoto { padding-right: 50px;
简单的问题,如何定位具有整个页面引用的元素? 在我的例子中,我在标题中得到了一个 float 图像,然后是 2 组标题。当我使用时: text-align: center; 它使用图像宽度端和页面其余
我是一名优秀的程序员,十分优秀!