免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1477 | 回复: 0
打印 上一主题 下一主题

指南针的设置和使用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-26 14:27 |只看该作者 |倒序浏览
指南针小demo

(1)设置背景图片,设置指南针背景图.
  1. //背景图片
  2.     UIImageView* backgroundImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"BackGroundPad.png"]];
  3.     [self.view addSubview:backgroundImage];
  4.    
  5.     //创建指南针图片
  6.     self.compassImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"compass.png"]];
  7.    
  8.     self.compassImageView.center = CGPointMake(160 , 240);
  9.     [self.view addSubview:self.compassImageView];
复制代码
(2)初始化位置管理器

指南针的使用离不开位置管理器,需要使用CLLocationManager,
  1. //初始化locationManager并设置代理类
  2.     self.locationManager = [[CLLocationManager alloc]init];
  3.     self.locationManager.delegate = self;
复制代码
如果设备的探测器正常开启,则进行指南针相关设置,否则弹出alertView,进行提示探测器无法使用.代码如下:
  1. if ([CLLocationManager headingAvailable]) {
  2.         
  3.         //设置精度
  4.         self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
  5.         
  6.         //设置滤波器不工作
  7.         self.locationManager.headingFilter =  kCLHeadingFilterNone;
  8.         
  9.         //开始更新
  10.         [self.locationManager startUpdatingHeading];
  11.        // [self.locationManager startUpdatingLocation];
  12.         
  13.         _jiaoDu = [[UILabel alloc] initWithFrame:CGRectMake(140, 320, 60, 30)];
  14.         _jiaoDu.backgroundColor = [UIColor redColor];
  15.         _fangXiang = [[UILabel alloc] initWithFrame:CGRectMake(140, 360, 60, 30)];
  16.         _fangXiang.backgroundColor = [UIColor yellowColor];
  17.         [self.view addSubview:_jiaoDu];
  18.         [self.view addSubview:_fangXiang];
  19.     }
  20.     else
  21.     {
  22.         UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"提示" message:@"传感器不可用" delegate:nil cancelButtonTitle:@"返回" otherButtonTitles: nil];
  23.         [alert show];
  24.     }
复制代码
(3)执行代理方法,实现实时显示数据和方向
  1. //调用locationManager成员方法
  2. - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading

  3. {
  4.     //重置view的位置
  5.     self.compassImageView.transform = CGAffineTransformIdentity;
  6.     CGAffineTransform transform = CGAffineTransformMakeRotation(-1 * M_PI*newHeading.magneticHeading/180.0);
  7.     self.compassImageView.transform = transform;
  8.     _jiaoDu.text = [NSString stringWithFormat:@"%0.1f°",newHeading.magneticHeading];
  9.     _jiaoDu.textColor = [UIColor whiteColor];
  10.    
  11.     if ((newHeading.magneticHeading >= 0 && newHeading.magneticHeading <=22 )|| newHeading.magneticHeading > 337) {
  12.         _fangXiang.text = @"北";
  13.        // NSLog(@"____________北");
  14.     }else if (newHeading.magneticHeading > 22 && newHeading.magneticHeading <=67){
  15.         _fangXiang.text = @"东北";
  16.         // NSLog(@"____________东北");
  17.     }else if (newHeading.magneticHeading > 67 && newHeading.magneticHeading <=112){
  18.         _fangXiang.text = @"东";
  19.         // NSLog(@"____________东");
  20.     } else if (newHeading.magneticHeading > 112 && newHeading.magneticHeading <=157) {
  21.         _fangXiang.text = @"东南";
  22.         // NSLog(@"____________东南");
  23.     }else if (newHeading.magneticHeading > 157 && newHeading.magneticHeading <=202){
  24.         _fangXiang.text = @"南";
  25.          //NSLog(@"____________南");
  26.     }else if (newHeading.magneticHeading > 202 && newHeading.magneticHeading <=247){
  27.         _fangXiang.text = @"西南";
  28.          //NSLog(@"____________西南");
  29.     }else if (newHeading.magneticHeading > 247 && newHeading.magneticHeading <=292){
  30.         _fangXiang.text = @"西";
  31.        //  NSLog(@"____________西");
  32.     }else{
  33.         _fangXiang.text = @"西北";
  34.         // NSLog(@"____________西北");
  35.     }
  36.     _fangXiang.textColor = [UIColor whiteColor];
  37.     _fangXiang.textAlignment = 1;
  38.    
  39. }
复制代码
(4)程序调试能够正常使用.


备注:



   如果您确实需要使用Core Location框架,则务必控制在最小程度,且正确地配置位置服务。收集位置数据需要给主板上的接收装置上电,并向基站、Wi-Fi热点、或者GPS卫星查询,这个过程可能要花几秒钟的时间。此外,请求更高精度的位置数据可能需要让接收装置更长时间地处于打开状态,而长时间地打开这个硬件会耗尽设备的电池。如果位置信息不是频繁变化,通常可以先取得初始位置,然后每隔一段时间请求一次更新就可以了。如果您确实需要定期更新位置信息,也可以为位置服务设置一个最小的距离阈值,从而最小化代码必须处理的位置更新。



取得用户当前位置首先要CLLocationManager类的实例,并用期望的精度和阈值参数进行配置。开始接收通告则需要为该对象分配一个delegate,然后调用startUpdatingLocation方法来确定用户当前位置。当新的位置数据到来时,位置管理器会通知它的委托对象。如果位置更新通告已经发送完成,您也可以直接从CLLocationManager对象获取最新的位置数据,而不需要等待新的事件。


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP