無論是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 }
以上是Demo的所有代碼,下面是運行的效果圖: