zoukankan      html  css  js  c++  java
  • 封装CLLocationManager定位获取经纬度


    创建调用方法,在.h文件里

    #import <Foundation/Foundation.h>
    
    @interface RMMapLocation : NSObject
    {
        void (^saveGpsCallBack)(double lattitude,double longitude);
    }
    + (void)getGps:(void(^)(double lattitude,double longitude))block;
    + (void)stop;
    

    在.m文件里进行方法的实现

    #import "RMMapLocation.h"
    
    @interface RMMapLocation ()<CLLocationManagerDelegate>
    @property (strong, nonatomic)CLLocationManager *locManager;
    
    @end
    
    @implementation RMMapLocation
    
    + (instancetype)sharedGpsManager
    {
        static id mapLocation;    
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            if (!mapLocation) {
                mapLocation = [[RMMapLocation alloc] init];
            }
        });
        return mapLocation;
    }
    
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            [self getCurrentLocation];
        }
        return self;
    }
    
    - (void)getCurrentLocation
    {
        self.locManager = [[CLLocationManager alloc] init];
        self.locManager.delegate = self;
        self.locManager.desiredAccuracy = kCLLocationAccuracyBest;
        self.locManager.distanceFilter = 10.0;
    }
    
    - (void)getGps:(void (^)(double lat, double lng))gps
    {
        if ([CLLocationManager locationServicesEnabled] == FALSE) {
            return;
        }
        saveGpsCallBack = [gps copy];
        [self.locManager startUpdatingLocation];
    }
    
    + (void)getGps:(void (^)(double, double))block
    {
        [[RMMapLocation sharedGpsManager] getGps:block];
    }
    
    - (void)stop
    {
        [self.locManager stopUpdatingLocation];
    }
    
    + (void)stop
    {
        [[RMMapLocation sharedGpsManager] stop];
    }
    
    #pragma mark - locationManagerDelegate
    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
    {
        RMLog(@"%f,%f",newLocation.coordinate.latitude,newLocation.coordinate.longitude);
        double latitude = newLocation.coordinate.latitude;
        double longitude = newLocation.coordinate.longitude;
        if (saveGpsCallBack) {
            saveGpsCallBack(latitude,longitude);
        }
    }
    
    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
    {
        RMLog(@"%@",error);
    //    [RMUtils showMessage:@"定位失败"];
    }
    

    在须要调用的文件里引入头文件后调用方法的实现(如需仅仅定位一次,则调用stop方法就可以)

    [RMMapLocation getGps:^(double lattitude, double longitude) {
            RMLog(@"%f---%f",lattitude,longitude);
    }];
    


    demo地址:http://download.csdn.net/detail/sinat_28585351/9491130

     https://github.com/Raymon-lau/CLLocationManager





  • 相关阅读:
    CentOS中用top命令CPU负载
    Oracle文档阅读指南
    修改oracle用户密码永不过期
    让secureCRT以命令行方式启动图形界面
    .NET 2.0 SQL依赖注意事项(转载:原文《使用SQL Server 2005 Query Notification的几个注意事项》)
    SQL Server 2005服务状态管理工具
    一个常用的正则表达验证类
    解决TFS中MSBuild开发项目和开发编译中一些冲突(小技巧)
    ASP.NET 2.0 WebService中传递DataTable参考
    LightningFramework系列(各层详细设计类图)
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7246744.html
Copyright © 2011-2022 走看看