iOS開發之地圖與定位


  無論是QQ還是微信的移動客戶端都少不了定位功能,之前在微信demo中沒有添加定位功能,今天就寫個定位的小demo來了解一下定位和地圖的東西。地圖和定位看上去是挺高大上一東西,其實用法比TableView簡單多了,下面的Demo是用的iOS中自帶的地圖和定位,當然了也可以用第三方的來加載地圖,比如百度地圖啥的,在這就不贅述了。今天的博客主要是介紹MKMapView的使用,MapView的使用和其他組件的用法差不多,MapView用的是委托回調,在使用mapView的Controller中要實現MKMapViewDelegate協議,並注冊委托回調,然后實現相應的回調方法即可。

 

  一,構建Demo的組件

    為了節省時間這個demo中的MapView是用Storyboard拖出來的,storyboard中的結構如下所示,上面是MKMapView用於顯示地圖,下面的labei用於顯示當前經緯度:

  二,引入MKMapView要用的包,截圖如下:

 

  三、編寫標注模塊的類

    1.首先解釋一下標注模塊是什么東西:標注模塊就是顯示當前地理位置的信息,下面圖種綠色框中是標注模塊:

  

  

    2.編寫標注類,標注類必須實現MKAnnotation協議,MyAnnotation.h中的代碼如下:

  

    3.實現協議MyAnnotation中的方法,titile返回的是標題,subTitle是子標題,代碼如下:

  四、編寫ViewController中的代碼

    1.ViewController.h中要引入相應的包和實現相應的協議代碼如下

    2.編寫ViewController.m中的代碼,實現協議中相應的委托回調方法,.m中的延展和初始化方法如下

     

    3.實現委托回調中的標注視圖,代碼截圖如下:

 

    4.獲取地理位置信息,代碼如下:

 1 //實現協議中的方法獲取坐標
 2 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
 3 {
 4     //獲取location
 5     CLLocation *location = userLocation.location;
 6     
 7     //通過location獲取經緯度
 8     CLLocationCoordinate2D coordinate = location.coordinate;
 9     
10     
11     //顯示經緯度
12     [self mapPoint:coordinate];
13     
14     
15     //標記范圍
16     MKCoordinateSpan span;
17     span.latitudeDelta=0.1;
18     span.longitudeDelta=0.1;
19     MKCoordinateRegion region={coordinate ,span};
20     
21     [self.myMapView setRegion:region];
22     
23     
24 
25     __block __weak ViewController *copy_self = self;
26 
27     //解析地理位置
28     CLGeocoder *geocoder = [[CLGeocoder alloc] init];
29     [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
30         if (placemarks.count > 0) {
31             //使用CLPlacemark解析地理位置
32             CLPlacemark *placeMark = placemarks[0];
33             NSDictionary *addressDictionary = placeMark.addressDictionary;
34     
35             
36             //添加地圖的標注
37             MyAnnotation *annotation = [[MyAnnotation alloc] init];
38             annotation.subTitle = addressDictionary[@"Name"];
39             annotation.coordinate = coordinate;
40             
41             //添加標注信息
42             [copy_self.myMapView addAnnotation:annotation];
43         }
44     }];
45   
46 }
View Code

 

  以上是Demo的所有代碼,下面是運行的效果圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM