// // PositionTool.m // IBOSS // // Created by ssl on 2017/12/28. // Copyright © 2017年 elongtian. All rights reserved. // #import "PositionTool.h" @implementation PositionTool static PositionTool *_positionTool; +(PositionTool *)shareInfo { @synchronized(self) { if (_positionTool == nil) { _positionTool=[[PositionTool alloc] init]; _positionTool.positionName=@"没有定位"; } } return _positionTool; } /* 释放单例实现 */ -(void)freeInfo { if (_positionTool) { _positionTool = nil; } } -(id)init { self=[super init]; if (self) { _locationArr=[[NSMutableArray alloc] init]; } return self; } /** 代理回调添加和删除实现方法 @param delegate 代理 */ -(void)addDelegate:(id)delegate { [_locationArr addObject:delegate]; } -(void)removeDelegate:(id)delegate { [_locationArr removeObject:delegate]; } /** 获取位置信息 */ -(CLLocationCoordinate2D)getCenter { return [_locationManager location].coordinate; } -(void)updateLocation { [_locationManager startUpdatingLocation]; } #pragma mark ========= 获取位置 ========== -(void)getLocation { if ([CLLocationManager locationServicesEnabled]) { _locationManager=[[CLLocationManager alloc] init]; [_locationManager requestAlwaysAuthorization]; //定位授权状态(始终定位、当使用时定位) CLAuthorizationStatus status = [CLLocationManager authorizationStatus]; if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) { NSLog(@"授权通过"); } else { NSLog(@"授权不通过"); } _locationManager.delegate=self; //精度最高,耗电最大 _locationManager.desiredAccuracy=kCLLocationAccuracyBest; _locationManager.distanceFilter = 10; [_locationManager startUpdatingLocation]; if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { _locationManager.allowsBackgroundLocationUpdates =NO; } } } #pragma mark - 调用地图代理方法 -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"%@",error); } -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { switch (status) { case kCLAuthorizationStatusNotDetermined: if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { [_locationManager requestAlwaysAuthorization]; } break; default: break; } } //获取经纬度 -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *newLocation= [locations firstObject];; //CLLocationCoordinate2D oldCoordinate=newLocation.coordinate; //NSLog(@"旧的经度:%f,旧的纬度:%f",oldCoordinate.longitude,oldCoordinate.latitude); //NSLog(@"新的经度:%f,新的纬度:%f",newLocation.coordinate.longitude,newLocation.coordinate.latitude); _latitude=newLocation.coordinate.latitude; _longtitude=newLocation.coordinate.longitude; [manager stopUpdatingLocation]; CLGeocoder *geocoder=[[CLGeocoder alloc] init]; [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray * _Nullable placemarks, NSError * _Nullable error) { for (CLPlacemark *place in placemarks) { if(place.name == nil || [place.name isEqualToString:@""]){ self.street = @""; }else{ self.street = place.name; } if(place.locality == nil || [place.locality isEqualToString:@""]){ self.city = @""; }else{ self.city = place.locality; } if(place.subLocality == nil || [place.subLocality isEqualToString:@""]){ self.area = @""; }else{ self.area = place.subLocality; } if(place.administrativeArea == nil || [place.administrativeArea isEqualToString:@""]){ self.province = @""; }else{ self.province = place.administrativeArea; } } for (iddelegate in _locationArr) { if (delegate && [delegate respondsToSelector:@selector(noticePositionChanged)]) { [delegate noticePositionChanged]; } } }]; for (id delegate in _locationArr) { if (delegate && [delegate respondsToSelector:@selector(noticePositionChanged)]) { [delegate noticePositionChanged]; } } } @end