IOS 포지셔닝 CoreLocation 캡슐화

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>


@interface GpsManager : NSObject <CLLocationManagerDelegate> {
    CLLocationManager *manager;
    
    // block   
    void (^saveGpsCallback) (double lat, double lng);
}

//   cb 
+ (void) getGps:(  void (^)(double lat, double lng) )cb;
+ (void) stop;

@end
#import "GpsManager.h"
#import <CoreLocation/CoreLocation.h>
#import <UIKit/UIKit.h>

@implementation GpsManager

+ (id) sharedGpsManager {
    static id s;
    if (s == nil) {
        s = [[GpsManager alloc] init];
    }
    return s;
}
- (id)init {
    self = [super init];
    if (self) {
        //    
        manager = [[CLLocationManager alloc] init];
        manager.delegate = self;
        manager.desiredAccuracy = kCLLocationAccuracyBest;
        
        //  iOS8.0 
        /* Info.plist 2 
         NSLocationAlwaysUsageDescription      Boolean YES
         NSLocationWhenInUseUsageDescription   Boolean YES
         */

        //   requestWhenInUseAuthorization >=iOS8.0 
        // respondsToSelector:  manager requestWhenInUseAuthorization 
        // 1.    
        if ([manager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
            [manager requestWhenInUseAuthorization];
            [manager requestAlwaysAuthorization];
        }
        // 2.   systemVersion   8.1.1
        float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
        if (osVersion >= 8) {
            [manager requestWhenInUseAuthorization];
            [manager requestAlwaysAuthorization];
        }
    }
    return self;
}
- (void) getGps:(  void (^)(double lat, double lng) )cb {
    if ([CLLocationManager locationServicesEnabled] == FALSE) {
        return;
    }
    // block copy
    saveGpsCallback = [cb copy];
    
    //  
    [manager stopUpdatingLocation];
    //  
    [manager startUpdatingLocation];
}

+ (void) getGps:(  void (^)(double lat, double lng) )cb {
    [[GpsManager sharedGpsManager] getGps:cb];
}

- (void) stop {
    [manager stopUpdatingLocation];
}
+ (void) stop {
    [[GpsManager sharedGpsManager] stop];
}

//  
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    for (CLLocation *loc in locations) {
        CLLocationCoordinate2D l = loc.coordinate;
        double lat = l.latitude;
        double lnt = l.longitude;
        
        //  blocks  blocks
        if (saveGpsCallback) {
            saveGpsCallback(lat, lnt);
        }
    }
}
 :
// 
    __block  BOOL isOnece = YES;
    [GpsManager getGps:^(double lat, double lng) {
        isOnece = NO;
        
        // 
        NSLog(@"lat lng (%f, %f)", lat, lng);
        
        if (!isOnece) {
            [GpsManager stop];
        }
    }];
    
 // 
    [GpsManager getGps:^(double lat, double lng) {
        
        // 
        NSLog(@"lat lng (%f, %f)", lat, lng);
    }];

좋은 웹페이지 즐겨찾기