- 論壇徽章:
- 0
|
指南針小demo
(1)設(shè)置背景圖片,設(shè)置指南針背景圖.- //背景圖片
- UIImageView* backgroundImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"BackGroundPad.png"]];
- [self.view addSubview:backgroundImage];
-
- //創(chuàng)建指南針圖片
- self.compassImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"compass.png"]];
-
- self.compassImageView.center = CGPointMake(160 , 240);
- [self.view addSubview:self.compassImageView];
復(fù)制代碼 (2)初始化位置管理器
指南針的使用離不開位置管理器,需要使用CLLocationManager,- //初始化locationManager并設(shè)置代理類
- self.locationManager = [[CLLocationManager alloc]init];
- self.locationManager.delegate = self;
復(fù)制代碼 如果設(shè)備的探測器正常開啟,則進(jìn)行指南針相關(guān)設(shè)置,否則彈出alertView,進(jìn)行提示探測器無法使用.代碼如下:- if ([CLLocationManager headingAvailable]) {
-
- //設(shè)置精度
- self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
-
- //設(shè)置濾波器不工作
- self.locationManager.headingFilter = kCLHeadingFilterNone;
-
- //開始更新
- [self.locationManager startUpdatingHeading];
- // [self.locationManager startUpdatingLocation];
-
- _jiaoDu = [[UILabel alloc] initWithFrame:CGRectMake(140, 320, 60, 30)];
- _jiaoDu.backgroundColor = [UIColor redColor];
- _fangXiang = [[UILabel alloc] initWithFrame:CGRectMake(140, 360, 60, 30)];
- _fangXiang.backgroundColor = [UIColor yellowColor];
- [self.view addSubview:_jiaoDu];
- [self.view addSubview:_fangXiang];
- }
- else
- {
- UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"提示" message:@"傳感器不可用" delegate:nil cancelButtonTitle:@"返回" otherButtonTitles: nil];
- [alert show];
- }
復(fù)制代碼 (3)執(zhí)行代理方法,實(shí)現(xiàn)實(shí)時(shí)顯示數(shù)據(jù)和方向- //調(diào)用locationManager成員方法
- - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
- {
- //重置view的位置
- self.compassImageView.transform = CGAffineTransformIdentity;
- CGAffineTransform transform = CGAffineTransformMakeRotation(-1 * M_PI*newHeading.magneticHeading/180.0);
- self.compassImageView.transform = transform;
- _jiaoDu.text = [NSString stringWithFormat:@"%0.1f°",newHeading.magneticHeading];
- _jiaoDu.textColor = [UIColor whiteColor];
-
- if ((newHeading.magneticHeading >= 0 && newHeading.magneticHeading <=22 )|| newHeading.magneticHeading > 337) {
- _fangXiang.text = @"北";
- // NSLog(@"____________北");
- }else if (newHeading.magneticHeading > 22 && newHeading.magneticHeading <=67){
- _fangXiang.text = @"東北";
- // NSLog(@"____________東北");
- }else if (newHeading.magneticHeading > 67 && newHeading.magneticHeading <=112){
- _fangXiang.text = @"東";
- // NSLog(@"____________東");
- } else if (newHeading.magneticHeading > 112 && newHeading.magneticHeading <=157) {
- _fangXiang.text = @"東南";
- // NSLog(@"____________東南");
- }else if (newHeading.magneticHeading > 157 && newHeading.magneticHeading <=202){
- _fangXiang.text = @"南";
- //NSLog(@"____________南");
- }else if (newHeading.magneticHeading > 202 && newHeading.magneticHeading <=247){
- _fangXiang.text = @"西南";
- //NSLog(@"____________西南");
- }else if (newHeading.magneticHeading > 247 && newHeading.magneticHeading <=292){
- _fangXiang.text = @"西";
- // NSLog(@"____________西");
- }else{
- _fangXiang.text = @"西北";
- // NSLog(@"____________西北");
- }
- _fangXiang.textColor = [UIColor whiteColor];
- _fangXiang.textAlignment = 1;
-
- }
復(fù)制代碼 (4)程序調(diào)試能夠正常使用.
備注:
如果您確實(shí)需要使用Core Location框架,則務(wù)必控制在最小程度,且正確地配置位置服務(wù)。收集位置數(shù)據(jù)需要給主板上的接收裝置上電,并向基站、Wi-Fi熱點(diǎn)、或者GPS衛(wèi)星查詢,這個(gè)過程可能要花幾秒鐘的時(shí)間。此外,請求更高精度的位置數(shù)據(jù)可能需要讓接收裝置更長時(shí)間地處于打開狀態(tài),而長時(shí)間地打開這個(gè)硬件會(huì)耗盡設(shè)備的電池。如果位置信息不是頻繁變化,通?梢韵热〉贸跏嘉恢,然后每隔一段時(shí)間請求一次更新就可以了。如果您確實(shí)需要定期更新位置信息,也可以為位置服務(wù)設(shè)置一個(gè)最小的距離閾值,從而最小化代碼必須處理的位置更新。
取得用戶當(dāng)前位置首先要CLLocationManager類的實(shí)例,并用期望的精度和閾值參數(shù)進(jìn)行配置。開始接收通告則需要為該對象分配一個(gè)delegate,然后調(diào)用startUpdatingLocation方法來確定用戶當(dāng)前位置。當(dāng)新的位置數(shù)據(jù)到來時(shí),位置管理器會(huì)通知它的委托對象。如果位置更新通告已經(jīng)發(fā)送完成,您也可以直接從CLLocationManager對象獲取最新的位置數(shù)據(jù),而不需要等待新的事件。
|
|