天天躁狠狠躁狠狠躁夜夜躁

      <track id="fedzv"></track>
      1. <optgroup id="fedzv"><dd id="fedzv"></dd></optgroup>
          1. <p id="fedzv"><strong id="fedzv"><small id="fedzv"></small></strong></p>


            IT開發/UI設計/運營/影視特效培訓機構

            400-111-8989

            熱門課程

            關于iphone定位的基本知識

            • 發布:IT培訓
            • 來源:IT學習資料
            • 時間:2018-06-29 17:26

            1.Getting the User’s Current Location

            獲取用戶當前位置。

            獲取位置的方式有三種:GPS, cell tower triangulation(蜂窩站點), 和 Wi-Fi Positioning Service (WPS).其中GPS是最精確的定位方式,但是在第一代iphone上沒有。GPS是通過讀取很多衛星微波信號來確定當前位置的。蜂窩站點通過 iphone周圍的站點計算出來的,在蜂窩站點密集的地方使用這種技術可以達到一個準確的值,比如在城市但在蜂窩站點不密集的地方效果就沒那么好了。最后 一個WPS使用的是連接到Wi-Fi網絡的IP地址來確定位置,這將會有較大的誤差。這三種方式都會消耗大量的電。怎么才能即實現定位功能又省電呢?下面的方法就可以解決:當使用Core Location時,可以選擇精確度,謹慎的選擇你所需要的準確度,可以幫助你省很多電。Core Location使用的技術隱藏在應用程序中。我們無需選擇使用GPS、蜂窩站點技術還是WPS,我們只要告訴它我們需要的準確度它會自己決定選什么技術 來滿足我們的需求。

            2.The Location Manager

            Core Location的接口是很容易使用的。主要用到的類是CLLocationManager,就是通常說的Location Manager。為了使用Core Location我們需要創建Location Manager的實體:

            CLLocationManager *locationManager = [[CLLocationManager alloc] init];

            這 樣我們就創建了 Location Manager的實體,但是我們還沒有開始定位。我們需要指派一個代理給Location Manager。當定位信息改變時Location Manager將調用代理方法。定位的過程會花一段時間平均幾秒鐘。代理方法必須遵循CLLocationManagerDelegate協議。

            3.Setting the Desired Accuracy

            設置代理后,你還要設置需要的準確度。就像我們剛剛說的精確度越高越耗電。如果你只是要是應用程序確定是哪個國家或是哪個州那么就不要設置很高的精確度。記住一點有時候你并不能得到你需要的精確度。

            下面說一個設置代理和設置精確度的例子:

            locationManager.delegate = self;

            locationManager.desiredAccuracy = kCLLocationAccuracyBest;

            精確度使用的是一個double類型的常量。單位是米,所以如果你設置desiredAccuracy=10那么精確度就是10米,這就告訴 Location Manager盡可能達到10米的精確度。還可以設置為其他常量:

            [cpp]

            extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation ;

            extern const CLLocationAccuracy kCLLocationAccuracyBest;

            extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;

            extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;

            extern const CLLocationAccuracy kCLLocationAccuracyKilometer;

            extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;4.Setting the Distance Filter

            4.Setting the Distance Filter

            默認情況是這樣的,每當位置改變時Location Manager就調用一次代理。

            通過設置distance filter可以實現當位置改變超出一定范圍時Location Manager才調用相應的代理方法。這樣可以達到省電的目的。

            例如:locationManager.distanceFilter = 1000.0f;

            如果設置默認值:

            locationManager.distanceFilter = kCLDistanceFilterNone;

            5.Starting the Location Manager

            開始定位

            當你轉備好為定位消耗電池時我們可以調用

            [locationManager startUpdatingLocation];

            來告訴 Location Manager開始定位

            6.Using the Location Manager Wisely

            如果你只需要確定當前位置而不需要進一步定位,當Location Manager查詢到當前位置時需要通知代理停止定位。

            停止方法: [locationManager stopUpdatingLocation];

            7.The Location Manager Delegate

            Location Manager必須遵守CLLocationManagerDelegate協議,CLLocationManagerDelegate協議定義了兩個方 法,并且這兩個方法都是可選的。其中一個方法是當確定當前位置或是位置信息改變時調用。另一個方法是當遇到錯誤信息時調用

            8.Getting Location Updates

            當Location Manager想通知它的代理當前位置時,它會調用

            locationManager:didUpdateToLocation:fromLocation: 方法。

            這個方法有3個參數第一個參數Location Manager。第二個參數是一個CLLocation對象用來確定當前位置,第三個是CLLocation 對象用來確定最近一次更新的位置。該方法調用時,先前的location對象會被置空。

            9.Getting Latitude and Longitude Using CLLocation

            經緯度

            位置信息是通過使用CLLocation類的實例從Location Manager那里得到的。這個類有5各屬性。latitude和longitude被封裝在coordinate屬性中。

            獲取方式如下:

            CLLocationDegrees latitude = theLocation.coordinate.latitude;

            CLLocationDegrees longitude = theLocation.coordinate.longitude;

            CLLocation對象還可以告訴你精確度。

            horizontalAccuracy屬性描述調整的中心點。horizontalAccuracy值越大越不精確。

            CLLocation 還有一個叫altitude的屬性用來表示海拔

            CLLocationDistance altitude = theLocation.altitude;

            每一個CLLocation對象都有一個叫verticalAccuracy的屬性來判斷精確度。海拔數值可能會有verticalAccuracy大小的誤差,當verticalAccuracy為負值時,那是Core Location在通知你不能獲取海拔高度。

            CLLocation的另一個屬性timestamp用來告訴Location Manager是什么時候定位的。CLLocation還有一個實例方法來告訴你的兩個CLLocation對象之間的距離。這個方法叫:getDistanceFrom:

            它是這樣工作的:

            CLLocationDistance distance = [fromLocation getDistanceFrom:toLocation];

            返回兩個時間段內的距離,有時候它是不考慮海拔的,所以要自己計算距離。

            10.Error Notifications

            如果Core Location不能指定你當前的位置,它將調用CLLocation的第二個代理方法:locationManager:didFailWithError:,最常見的是用戶取消使用定位信息。

            預約申請免費試聽課

            填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

            上一篇:iphone-隱藏tabbar會出現空白
            下一篇:iPhone/iPad開發之:掃盲貼

            達內it學習路線?如何學好it?

            學編程需要什么基礎嗎?

            Python、Java、C++該學哪一個

            學編程需要什么基礎嗎

            • 掃碼領取資料

              回復關鍵字:視頻資料

              免費領取 達內課程視頻學習資料

            • 視頻學習QQ群

              添加QQ群:1143617948

              免費領取達內課程視頻學習資料

            Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

            選擇城市和中心
            江西省

            貴州省

            廣西省

            海南省

            天天躁狠狠躁狠狠躁夜夜躁 欧美重口另类在线播放二区,忘忧草在线社区WWW日本-韩国,国色天香一卡2卡3卡4卡视频| 国产男女猛烈视频在线观看,男女无遮挡猛进猛出免费视频,男女猛烈无遮激烈太紧动态图| 好男人在线社区WWW在线影院,巨人WWW视频在线观看高清,忘忧草社区在线WWW网