AI智能
改变未来

IOS开发控件视图day06:Location定位和Map地图的使用

1、导包和配置文件
(1)Info.plist文件设置访问权限
(2)点击项目,在General中添加包

2、Location获取当前位置坐标
(1)声明和关联控件

@interface LocationViewController ()<CLLocationManagerDelegate>//位置管理者@property (nonatomic,strong)CLLocationManager *manager;@property (weak, nonatomic) IBOutlet UILabel *lab1;@property (weak, nonatomic) IBOutlet UILabel *lab2;@property (weak, nonatomic) IBOutlet UILabel *lab3;@end

(2)初始化

@implementation LocationViewController- (void)viewDidLoad {[super viewDidLoad];[self location];}- (CLLocationManager *)manager{if (!_manager) {_manager = [[CLLocationManager alloc] init];}return _manager;}

(3)定位

-(void)location{//1、创建位置管理器//向用户请求我们的程序使用位置[self.manager requestAlwaysAuthorization];[self.manager requestWhenInUseAuthorization];//设置定位的更新距离(10米)self.manager.distanceFilter = 10.0f;//设置代理self.manager.delegate = self;//开启定位功能[self.manager startUpdatingLocation];}

(4)获取位置与编码

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{//获得当前最新位置CLLocation *location = (CLLocation *)[locations lastObject];double lat = location.coordinate.latitude;double lon = location.coordinate.longitude;NSString *str1 = [NSString stringWithFormat:@\" %f\",lat];NSString *str2 = [NSString stringWithFormat:@\" %f\",lon];_lab1.text = str1;_lab2.text = str2;//反地理编码实现所在城市显示//1、创建一个CLGecoder对象CLGeocoder *geocoder = [CLGeocoder new];//2、实现反地理编码方法[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {//3.1、预防处理if (placemarks.count == 0 || error) {NSLog(@\"解析没有数据或者出错\");return;}for (CLPlacemark *placemark in placemarks) {NSString *str3 = [NSString stringWithFormat:@\"%@,%@\",placemark.locality,placemark.name];self.lab3.text  = str3;}}];}

(5)停止定位

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{[self.manager stopUpdatingLocation];}

(6)实际效果


3、Map地图的定位、放大缩小以及地图样式
(1)声明和绑定控件

@interface MapViewController ()<MKMapViewDelegate>@property (retain, nonatomic) IBOutlet MKMapView *mapView;@property(nonatomic,strong)CLLocationManager *mgr;@end

(2)位置管理器

//1、创建位置管理器self.mgr  = [CLLocationManager new];//2、请求授权 -->plistif ([self.mgr respondsToSelector:@selector(requestWhenInUseAuthorization)]) {[self.mgr requestWhenInUseAuthorization];}//3、设置显示用户位置self.mapView.userTrackingMode = MKUserTrackingModeFollow;//4、设置代理-->获取用户位置self.mapView.delegate = self;

(3)地图样式切换

- (IBAction)mapTypeChangeClick:(UISegmentedControl *)sender {//    MKMapTypeStandard = 0, 默认//    MKMapTypeSatellite,   卫星//    MKMapTypeHybrid,      混合//    MKMapTypeSatelliteFlyover NS_ENUM_AVAILABLE(10_11, 9_0),//    MKMapTypeHybridFlyover NS_ENUM_AVAILABLE(10_11, 9_0),//    MKMapTypeMutedStandard NS_ENUM_AVAILABLE(10_13, 11_0) __TVOS_AVAILABLE(11_0),switch (sender.selectedSegmentIndex) {case 0:self.mapView.mapType = MKMapTypeStandard;break;case 1:self.mapView.mapType = MKMapTypeSatellite;break;case 2:self.mapView.mapType = MKMapTypeHybrid;break;default:break;}}

(4)完成用户位置更新的时候,调用MKUserLocation:大头针模型

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{//显示大头针信息 -->反地理编码实现//1、创建一个CLGecoder对象CLGeocoder *geocoder = [CLGeocoder new];//2、实现反地理编码方法[geocoder reverseGeocodeLocation:userLocation.location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {//3.1、预防处理if (placemarks.count == 0 || error) {return;}//3.2、获取对象CLPlacemark *placemark = placemarks.lastObject;//3.3、设置标题为城市信息userLocation.title  = placemark.locality;//3.4设置子标题为详细地址userLocation.subtitle = placemark.name;}];}

(6)返回用户所在位置

- (IBAction)backUserLocationClick:(id)sender{//1、设置中心点坐标//    self.mapView.centerCoordinate = self.mapView.userLocation.location.coordinate;//2、设置范围属性//2.1、获取坐标CLLocationCoordinate2D coordinate = self.mapView.userLocation.location.coordinate;//2.2设置显示范围MKCoordinateSpan span = MKCoordinateSpanMake(0.028219, 0.017767);//设置范围方法,可以设置动画[self.mapView setRegion:MKCoordinateRegionMake(coordinate, span)animated:YES];}//当地图显示区域发生改变后,会调用的方法-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{//获取默认的显示大小 --> spanNSLog(@\"latitudeDelta:%f,longitudeDelta:%f\",mapView.region.span.latitudeDelta,mapView.region.span.longitudeDelta);}

(7)放大地图

- (IBAction)zoomIn:(id)sender{//1、Delta缩小一倍CGFloat latitude = self.mapView.region.span.latitudeDelta * 0.5;CGFloat longitude = self.mapView.region.span.longitudeDelta * 0.5;//2、重设region值[self.mapView setRegion:MKCoordinateRegionMake(self.mapView.region.center, MKCoordinateSpanMake(latitude, longitude))animated:YES];}

(8)缩小地图

- (IBAction)zoomOut:(id)sender{//1、Delta扩大一倍CGFloat latitude = self.mapView.region.span.latitudeDelta * 2;CGFloat longitude = self.mapView.region.span.longitudeDelta * 2;//2、重设region值[self.mapView setRegion:MKCoordinateRegionMake(self.mapView.region.center, MKCoordinateSpanMake(latitude, longitude))animated:YES];}

(9)实际效果

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » IOS开发控件视图day06:Location定位和Map地图的使用