// // 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.delegate=self; //精度最高,耗电最大 _locationManager.desiredAccuracy=kCLLocationAccuracyBest; _locationManager.distanceFilter = 200; [_locationManager startUpdatingLocation]; if ([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0) { [_locationManager requestAlwaysAuthorization]; } } } #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[0]; //CLLocationCoordinate2D oldCoordinate=newLocation.coordinate; //NSLog(@"旧的经度:%f,旧的纬度:%f",oldCoordinate.longitude,oldCoordinate.latitude); //NSLog(@"新的经度:%f,新的纬度:%f",newLocation.coordinate.longitude,newLocation.coordinate.latitude); self.latitude=newLocation.coordinate.latitude; self.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) { self.street=place.name; self.city=place.locality; self.area=place.subLocality; 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]; } } } -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { } @end