PositionTool.m 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. //
  2. // PositionTool.m
  3. // IBOSS
  4. //
  5. // Created by ssl on 2017/12/28.
  6. // Copyright © 2017年 elongtian. All rights reserved.
  7. //
  8. #import "PositionTool.h"
  9. @implementation PositionTool
  10. static PositionTool *_positionTool;
  11. +(PositionTool *)shareInfo {
  12. @synchronized(self) {
  13. if (_positionTool == nil) {
  14. _positionTool=[[PositionTool alloc] init];
  15. _positionTool.positionName=@"没有定位";
  16. }
  17. }
  18. return _positionTool;
  19. }
  20. /*
  21. 释放单例实现
  22. */
  23. -(void)freeInfo {
  24. if (_positionTool) {
  25. _positionTool = nil;
  26. }
  27. }
  28. -(id)init {
  29. self=[super init];
  30. if (self) {
  31. _locationArr=[[NSMutableArray alloc] init];
  32. }
  33. return self;
  34. }
  35. /**
  36. 代理回调添加和删除实现方法
  37. @param delegate 代理
  38. */
  39. -(void)addDelegate:(id<PositionToolDelegate>)delegate {
  40. [_locationArr addObject:delegate];
  41. }
  42. -(void)removeDelegate:(id)delegate {
  43. [_locationArr removeObject:delegate];
  44. }
  45. /**
  46. 获取位置信息
  47. */
  48. -(CLLocationCoordinate2D)getCenter {
  49. return [_locationManager location].coordinate;
  50. }
  51. -(void)updateLocation {
  52. [_locationManager startUpdatingLocation];
  53. }
  54. #pragma mark ========= 获取位置 ==========
  55. -(void)getLocation {
  56. if ([CLLocationManager locationServicesEnabled]) {
  57. _locationManager=[[CLLocationManager alloc] init];
  58. _locationManager.delegate=self;
  59. //精度最高,耗电最大
  60. _locationManager.desiredAccuracy=kCLLocationAccuracyBest;
  61. _locationManager.distanceFilter = 200;
  62. [_locationManager startUpdatingLocation];
  63. if ([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0) {
  64. [_locationManager requestAlwaysAuthorization];
  65. }
  66. }
  67. }
  68. #pragma mark - 调用地图代理方法
  69. -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
  70. NSLog(@"%@",error);
  71. }
  72. -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
  73. switch (status) {
  74. case kCLAuthorizationStatusNotDetermined:
  75. if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
  76. [_locationManager requestAlwaysAuthorization];
  77. }
  78. break;
  79. default:
  80. break;
  81. }
  82. }
  83. //获取经纬度
  84. -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
  85. CLLocation *newLocation=locations[0];
  86. //CLLocationCoordinate2D oldCoordinate=newLocation.coordinate;
  87. //NSLog(@"旧的经度:%f,旧的纬度:%f",oldCoordinate.longitude,oldCoordinate.latitude);
  88. //NSLog(@"新的经度:%f,新的纬度:%f",newLocation.coordinate.longitude,newLocation.coordinate.latitude);
  89. self.latitude=newLocation.coordinate.latitude;
  90. self.longtitude=newLocation.coordinate.longitude;
  91. [manager stopUpdatingLocation];
  92. CLGeocoder *geocoder=[[CLGeocoder alloc] init];
  93. [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
  94. for (CLPlacemark *place in placemarks) {
  95. self.street=place.name;
  96. self.city=place.locality;
  97. self.area=place.subLocality;
  98. self.province = place.administrativeArea;
  99. }
  100. for (id<PositionToolDelegate>delegate in _locationArr) {
  101. if (delegate && [delegate respondsToSelector:@selector(noticePositionChanged)]) {
  102. [delegate noticePositionChanged];
  103. }
  104. }
  105. }];
  106. for (id<PositionToolDelegate> delegate in _locationArr) {
  107. if (delegate && [delegate respondsToSelector:@selector(noticePositionChanged)]) {
  108. [delegate noticePositionChanged];
  109. }
  110. }
  111. }
  112. -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
  113. }
  114. @end