iOS 도구 클래스 - 포지셔닝

3844 단어
  • 개발 과정에서 중복적인 수요를 자주 만나기 때문에 중복적인 코드가 자연히 생길 수 있다.흰둥이는command+c,command+v;큰 소는 중복된 코드를 뽑아 도구류로 봉한다.좋은 도구류는 프로젝트의 코드 양을 줄이고 코드의 군더더기를 피하며 개발 속도를 높일 수 있다.
  • 'iOS 도구클래스'시리즈는 지속적으로 업데이트되고 자신이 봉인된 도구클래스를 여러분에게 공유하여 프로젝트에 직접 코드를 붙여서 사용할 수 있습니다.다음은 iOS 도구 클래스의 위치입니다.

  • 준비

  • 포지셔닝에 대해 말하자면 코드 외에 두 가지 변경도 관련된다
  • 1. Frameworks
    CoreLocation을 추가합니다.프로젝트에 대한 프레임워크
    2. Info.plist
    Info 구성plist
  • Info.plist는 source code 형식으로 열고 다음 코드를 붙여넣습니다(필요에 따라 구체적으로 그것을 사용해도 나쁘지 않습니다) NSLocation Usage Description Apps는 당신의 동의가 있어야 위치NSLocation Always Usage Description Apps에 접근할 수 있습니다. 당신의 동의가 있어야 위치NSLocation When InUse Usage Description Apps는 당신의 동의가 있어야 사용 기간에 위치키를 잘못 쓰지 않습니다.string은 마음대로 쓸 수 있다
  • 2. 또는 목록에 NSLocation UsageDescription을 Key, String은 Type, Value에 직접 추가하여 상황에 따라 쓰기
    ⚠️ iOS 10 이후의 권한(예: 카메라, 마이크 등)은 Info.plist에서 구성

    2. 사고방식


    1. 단일 예시를 만들고 init 방법에서 초기화
    2. Block 및 getGps 방법 정의
    3. startUpdatingLocation을 호출하고 CLLocation Coordinate2D를 통해 경위도를 획득

    코드

  • QPlocation Manager를 만들고 NSObject의 클래스를 계승
  • 1. QPLocationManager.h
    #import 
    
    typedef void(^LocationBlock)(NSString * lon, NSString * lat);
    
    @interface QPLocationManager : NSObject
    
    + (instancetype)sharedManager;
    
    - (void)getGps:(LocationBlock)block;
    
    @property (nonatomic, strong) NSString * lon;
    @property (nonatomic, strong) NSString * lat;
    
    @end
    

    2. QPLocationManager.m
    #import "QPLocationManager.h"
    #import 
    
    @interface QPLocationManager ()
    
    @property (nonatomic, strong) CLLocationManager * locManager;
    
    @property (nonatomic, copy) LocationBlock block;
    
    @end
    
    @implementation QPLocationManager
    
    + (instancetype)sharedManager {
        
        static QPLocationManager * _manager;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _manager = [[QPLocationManager alloc] init];
        });
        
        return _manager;
        
    }
    
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            
            _locManager = [[CLLocationManager alloc] init];
            [_locManager setDesiredAccuracy:kCLLocationAccuracyBest];
            _locManager.distanceFilter = 100;
            _locManager.delegate = self;
            
            if (![CLLocationManager locationServicesEnabled]) {
                NSLog(@"       ");
            } else {
                
                CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
    
                if (status == kCLAuthorizationStatusNotDetermined) {
                    [_locManager requestWhenInUseAuthorization];
                }
                
            }
        }
        return self;
    }
    
    - (void)locationManager:(CLLocationManager *)manager
        didUpdateToLocation:(CLLocation *)newLocation
               fromLocation:(CLLocation *)oldLocation {
        
        CLLocationCoordinate2D coor = newLocation.coordinate;
        
        NSString * lat = [NSString stringWithFormat:@"%@",@(coor.longitude)];
        NSString * lon = [NSString stringWithFormat:@"%@",@(coor.latitude)];
        
        [QPLocationManager sharedManager].lon = lon;
        [QPLocationManager sharedManager].lat = lat;
       
        self.block(lat,lon);
        
        [self.locManager stopUpdatingLocation];
      
    }
    
    - (void)getGps:(LocationBlock)block {
        
        self.block = block;
        [self.locManager startUpdatingLocation];
        
    }
    
    @end
    

    3. 호출(당신이 필요로 하는 곳에 헤드 파일을 도입)
    [[QPLocationManager sharedManager] getGps:^(NSString *lat, NSString *lon) {
            
        NSLog(@"%@,%@",lon, lat);
            
    }];
    
  • 이전에 Block의 장점을 정의했는데 Block을 형삼으로 만들고 getGps를 치면 두 개의 리턴만 하면 코드가 나와서 효율이 크게 향상된다
  • 개인 Github 홈 페이지https://github.com/JackieQu
  • 개인 기술 블로그 Jackiequ.github.io
  • 좋은 웹페이지 즐겨찾기