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

新聞熱點
疑難解答