| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- //
- // 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<PositionToolDelegate>)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<CLLocation *> *)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<CLPlacemark *> * _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 (id<PositionToolDelegate>delegate in _locationArr) {
- if (delegate && [delegate respondsToSelector:@selector(noticePositionChanged)]) {
- [delegate noticePositionChanged];
- }
- }
- }];
-
- for (id<PositionToolDelegate> delegate in _locationArr) {
- if (delegate && [delegate respondsToSelector:@selector(noticePositionChanged)]) {
- [delegate noticePositionChanged];
- }
- }
- }
- -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
- }
- @end
|