1. 程式人生 > >iOS自帶的GPS 定位

iOS自帶的GPS 定位

首先匯入CoreLocation.framework,然後再引入標頭檔案#import 

定義屬性

@property (nonatomic , strong)CLLocationManager *locationManager;
然後使用代理 CLLocationManagerDelegate
- (void)locate{
    // 判斷定位操作是否被允許
    if([CLLocationManager locationServicesEnabled]) {
        //定位初始化
        _locationManager=[[CLLocationManager alloc] init];
        _locationManager.delegate=self;
        _locationManager.desiredAccuracy=kCLLocationAccuracyBest;
        _locationManager.distanceFilter=10;
        [_locationManager startUpdatingLocation];//開啟定位
    }else {
        //提示使用者無法進行定位操作
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@提示 message:@定位不成功 ,請確認開啟定位 delegate:nil cancelButtonTitle:@取消 otherButtonTitles:@確定, nil];
        [alertView show];
    }
    // 開始定位
    [_locationManager startUpdatingLocation];
}

#pragma mark - CoreLocation Delegate

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    //此處locations儲存了持續更新的位置座標值,取最後一個值為最新位置,如果不想讓其持續更新位置,則在此方法中獲取到一個值之後讓locationManager stopUpdatingLocation
    CLLocation *currentLocation = [locations lastObject];
    // 獲取當前所在的城市名
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    //根據經緯度反向地理編譯出地址資訊
    [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *array, NSError *error)
    {
        if (array.count > 0)
        {
            CLPlacemark *placemark = [array objectAtIndex:0];
            //NSLog(@%@,placemark.name);//具體位置
            //獲取城市
            NSString *city = placemark.locality;
            if (!city) {
                //四大直轄市的城市資訊無法通過locality獲得,只能通過獲取省份的方法來獲得(如果city為空,則可知為直轄市)
               city = placemark.administrativeArea;
            }
            cityName = city;
            NSLog(@定位完成:%@,cityName);
            //
系統
會一直更新資料,直到選擇停止更新,因為我們只需要獲得一次經緯度即可,所以獲取之後就停止更新 [manager stopUpdatingLocation]; }else if (error == nil && [array count] == 0) { NSLog(@No results were returned.); }else if (error != nil) { NSLog(@An error occurred = %@, error); } }]; }

viewDidLoad中呼叫了locate之後一直沒有資料返回,代理也不執行,在網上找了很多教程,程式碼大多大同小異,但是結果都是不理想,偶然之間看到ios8的定位和低版本的不同,我的手機剛好是ios8,便點開那個部落格去看看,部落格請點此進入

以下為該部落格摘要:

在iOS8以前的版本中,我們使用CLLocationManager定位是沒有問題的,最近在iOS8系統中卻無法定位了。。。。這是一大問題啊!

iOS8中使用CoreLocation定位

1、在使用CoreLocation前需要呼叫如下函式【iOS8專用】:
iOS8對定位進行了一些修改,其中包括定位授權的方法,CLLocationManager增加了下面的兩個方法:
(1)始終允許訪問位置資訊

- (void)requestAlwaysAuthorization;
(2)使用應用程式期間允許訪問位置資料
- (void)requestWhenInUseAuthorization;
示例如下:
locationManager=[[CLLocationManager alloc] init];
    locationManager.delegate=self;
    locationManager.desiredAccuracy=kCLLocationAccuracyBest;
    locationManager.distanceFilter=10;
    if (iOSVersion>=8) {
        [locationManager requestWhenInUseAuthorization];//使用程式其間允許訪問位置資料(iOS8定位需要)
    }
    [locationManager startUpdatingLocation];//開啟定位
2、在Info.plist檔案中新增如下配置:
(1)NSLocationAlwaysUsageDescription
(2)NSLocationWhenInUseUsageDescription

\

這樣新增後,定位功能就能正常使用了!

 //計算兩個位置之間的距離
71 -(void)countDistance
72 {
73     //根據經緯度建立兩個位置物件
74     CLLocation *loc1=[[CLLocation alloc]initWithLatitude:40 longitude:116];
75     CLLocation *loc2=[[CLLocation alloc]initWithLatitude:41 longitude:116];
76     //計算兩個位置之間的距離
77     CLLocationDistance distance=[loc1 distanceFromLocation:loc2];
78     NSLog(@"(%@)和(%@)的距離=%fM",loc1,loc2,distance);
79 }

相關推薦

iOSGPS 定位

首先匯入CoreLocation.framework,然後再引入標頭檔案#import  定義屬性 @property (nonatomic , strong)CLLocationManager *locationManager; 然後使用代理 CLLocationMa

監聽ios返回功能

self .com 滾動 get pre start top == sel //1.一開始用這段代碼,結果發現滾動都失效了,如果頁面大於屏幕高度將無法滾動至底部,所以淘汰 // document.addEventListener(‘touchmove‘, function

即時搜索:對於ios輸入法輸入中文時多次觸發input事件的處理

rip input事件 由於 了解 end 處理 移動 ref 使用 實現移動端的即時搜索的最佳方案,一定是使用input propertychange事件了,但是在ios設備上遇到了問題,使用ios自帶輸入法輸入漢字時,會出現多次觸發input事件的情況,一開始可能由於搜

iOS實現高斯模糊效果

引 什麼叫高斯模糊效果,通俗地說,就是毛玻璃效果,從iOS 7以來,就頻繁地被設計使用,如果用得好,效果會顯得非常的好。我們來看一個例子: 圖中下面一小部分就是高斯模糊效果。要實現也很簡單,iOS自身就支援這種效果。 iOS 7 UIToolbar

iOS端Mock GPS定位 —— 測試、開發、玩遊戲、發朋友圈等等,你都用得上

前言2017年,淘寶、天貓線下活動會場日益增多,個性化的地理圍欄圈人投放成了運營司空見慣的方式,那麼每次測試就變得非常蛋疼。安卓能找到一大波能虛擬定位的工具,那ios如何測試。我們Awareness的開發測試也遇到了這個問題。一開始我設定了園區1號樓和6號樓2個點,但是iphone的後臺LBSPush位置偏移

Unity3d-呼叫iPhone或則iOS的Maill App去傳送郵件

我在前面的部落格中也寫過,開啟Appstore,開啟設定之類的 由於在網上沒找到傳送郵件反饋的,大部分都說的是在遊戲內傳送郵件給玩家。 今天順著開啟appstore的方式去嘗試了下,可以直接利用Appliction去開啟Mail app,程式碼如下: public s

ios 地圖簡單使用

設定 plist 配置檔案 匯入兩個地圖應用框架 #import <CoreLocation/CoreLocation.h> #import <MapKit/MapKit.h> 定義地圖和地位屬性 @property (nonatomic , s

iOS_二維碼掃描(iOS

iOS7開始,不需要第三方也能進行二維碼掃描了。 之前用過ZBar這個第三方包,後來iOS版本高了用不了,貌似我下的那個包只支援32位。 應該還有其他版本的支援,只是後來沒用到就沒去找了。 今天研究了一下系統自帶的二維碼掃描,掃描速度很快。 肚子餓,節約點時間直接上程式碼

IOSEmail的兩種方法

IOS系統框架提供的兩種傳送Email的方法:openURL 和 MFMailComposeViewController。藉助這兩個方法,我們可以輕鬆的在應用里加入如使用者反饋這類需要傳送郵件的功能。 1.openURL 使用openURL呼叫系統郵箱客戶端是我們在

Unity3d發布IOS(包含u3dIAP內購)的流程-小白篇(四)-Xcode配置發布部分

真機調試 結束 app img ios ipa xcode spl 直接 上一篇:http://www.cnblogs.com/yzxhz/p/9618665.html 已經配置好了ios內購部分。加上原有開發的程序已經可以打包發布了。 本篇需要:mac電腦(

Xcode工具symbolicatecrash解析iOS Crash檔案

一、找到.app檔案和.app.dSYM檔案 在桌面建立一個crash資料夾,然後Xcode->Window->Organizer找到Archives找到App->右擊Show in Finder 複製.app和.app.dSYM到crash夾檔案:右擊.xc

ios 對於修改navigationItem的顏色和系統的navigationItem的rightBarButtonItem的顏色的問題

對於iOS的navigationItem的tittle的顏色修改: 首先建一個工程,建一個UINavigationController然後對navigationBar上tittle修改 只需要帶程式碼中新增如下程式碼即可 : //修改navigationItem的顏色

iOS系統的UIActivityIndicatorView小菊花

系統自帶的小菊花的型別有三種 typedef NS_ENUM(NSInteger, UIActivityIndicatorViewStyle) { UIActivityIndicatorViewStyleWhiteLarge, // 大一點的白色的 UIActivityIndicatorVi

vue 專案中 如何動態監聽瀏覽器以及iOS手機微信的返回按鈕的事件

vue搭建的頁面中,左上角的返回按鈕,我自己定義了返回的了路徑,可是當執行時,就會發現,蘋果手機的下方會有自帶的返回按鈕(安卓手機沒有),那麼這個按鈕的返回事件該如何設定呢? 一般情況下,微信自帶的返回按鈕都是返回上一個路徑,可是當我的頁面時使用者掃碼進入的,沒有上一條路徑

TextInput元件在ios輸入法下無法輸入中文的情況

最近,遇到了一個情況,react-native的TextInput元件在ios平臺只有自帶輸入法(沒有安裝其他的第三方輸入法)的情況下,沒有辦法輸入中文。 程式碼如下: 情況1: <Text

玩轉iOS開發:《使用系統的UIActivityViewController和UIActivity進行內容分享》

目錄 簡介 這段時間有很多朋友都問我關於怎麼去整合ShareSDK或者友盟社會化分享SDK的問題, 其實我想說, Apple一開始就提供了一個類, 供我們去使用分享了, 在iOS 6之後更加增強了這個類, 使我們不再需要整合第三方的, 而且還支援自定義分享的item. 作者感言 在我寫這篇文章的時

iOS 定義 中間突起圓形的tabbar

概述 在正常的使用場景中,我們處理了比較多的矩形區域內觸控事件,比如UIButton、UIControl。一般來說,這些控制元件的圖形以及觸控區域都是矩形或者圓角矩形的。但是在一些特殊應用場景中我們有時不得不面對這樣一種比較嚴苛的需求,比如要求程式只對某個圓形

iOS 刪除系統的tabbar

一、刪除系統自帶的tabbar 在開發中,我們時常會需要自己定義tabbar,使用自定義tabbar時,返回或者跳轉時會遇到tabbar重影的現象,這個時候我們需要將系統的tabbar //

iOS 定義加號的tabBar

轉載自:http://blog.csdn.net/dh245427794/article/details/73827071 在專案過程中,經常遇到系統原生的UITabBar無法滿足我們的需求,這時候就難免需要我們自己根據需求去自定義一個tabBar了。 原始碼地址

用Android的NETWORK_PROVIDER網路定位很慢

最近在做GPS的功能,用GPS_PROVIDER在室外直接定位,可以定位成功,然後我在室內就準備做用NETWORK_PROVIDER來定位,以為他會很快就會定位成功,但是當我實施的時候,發現很慢,要幾分鐘才會定位成功,