定位到用戶
#pragma mark - 導入MapKit框架
//1.導入頭文件
#import <MapKit/MapKit.h>
//MapKit框架中所有數據類型的前綴都是MK
//MapKit有一個比較重要的UI控件:MKMapView,專門用于地圖顯示
/*
MKMapTypeStandard = 0, //標準(默認)
MKMapTypeSatellite, //衛星
MKMapTypeHybrid, //鳥瞰(混合)
MKMapTypeSatelliteFlyover//在中國不能使用
MKMapTypeHybridFlyover
*/
//修改地圖類型
self.mapView.mapType = MKMapTypeStandard;
#pragma mark - 創建位置請求管理者并授權
//創建位置管理者
self.locationManager = [[CLLocationManager alloc] init];
//請求用戶授權 配置info.plist
[self.locationManager requestWhenInUseAuthorization];
#pragma mark - 設置mapView的跟蹤模式
/*
MKUserTrackingModeNone
MKUserTrackingModeFollow //跟蹤用戶的位置
MKUserTrackingModeFollowWithHeading //跟蹤用戶的位置和方向
*/
//設置用戶的跟蹤模式
self.mapView.userTrackingMode = MKUserTrackingModeFollow;
設置用戶的大頭針屬性
#pragma mark - 設置mapView的代理,實現協議,在didUpdateUserLocation方法中拿到MKUserLocation類型的大頭針
//設置代理
self.mapView.delegate = self;
#pragma mark - MKMapViewDelegate
//跟蹤用戶位置時調用
//mapView:地圖
//userLocation:用戶位置的大頭針模型
//userLocation有location、title、subtitle屬性,根據location反地理編碼拿到CLPlacemark并賦值給title和subtitle即可
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
//1.反地理編碼
//1.1創建地理編碼對象
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
//1.2反地理編碼
[geocoder reverseGeocodeLocation:userLocation.location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
//1.3防錯處理
if(error){
NSLog(@"%@",error);
return ;
}
//1.4.獲取地標
CLPlacemark *placemark = [placemarks firstObject];
//2.給標題和子標題賦值
userLocation.title = placemark.locality;
userLocation.subtitle = placemark.name;
}];
}
回到用戶當前位置
//回到當前用戶的位置
- (IBAction)backToCurrentLocation:(id)sender {
// //將當前用戶的經緯度,設置為滴入中心的經緯度
// self.mapView.centerCoordinate = self.mapView.userLocation.location.coordinate;
//獲取當前的跨度
MKCoordinateSpan span = MKCoordinateSpanMake(0.020993, 0.015407);
//設置回到用戶剛開始的區域 region(結構體) -- 1.心點經緯度(結構體)->精度 緯度 2.經緯度跨度->精度跨度 緯度跨度
//self.mapView.region = MKCoordinateRegionMake(self.mapView.userLocation.location.coordinate, span);
//設置區域,并添加動畫
[self.mapView setRegion:MKCoordinateRegionMake(self.mapView.userLocation.location.coordinate, span) animated:YES];
}
//跨度改變時候調用
-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
NSLog(@"%f %f",self.mapView.region.span.latitudeDelta,mapView.region.span.longitudeDelta);
}
放大和縮小地圖
//放大地圖
- (IBAction)biggerMap:(id)sender {
//修改經緯度跨度
CGFloat latitudeDelta = self.mapView.region.span.latitudeDelta * 0.5;
CGFloat longitudeDelta = self.mapView.region.span.longitudeDelta * 0.5;
MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
//確定放大地圖后的區域
[self.mapView setRegion:MKCoordinateRegionMake(self.mapView.centerCoordinate, span) animated:YES];
}
//縮小地圖
- (IBAction)smallMap:(id)sender {
//修改經緯度跨度
CGFloat latitudeDelta = self.mapView.region.span.latitudeDelta * 2;
CGFloat longitudeDelta = self.mapView.region.span.longitudeDelta * 2;
MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
//確定縮小地圖后的區域
[self.mapView setRegion:MKCoordinateRegionMake(self.mapView.centerCoordinate, span) animated:YES];
}