定位锁定方法

简介: 定位锁定方法

1.这只是导航栏上面的运用

image.png

//1.挂代理 CLLocationManagerDelegate
   导入#import <CoreLocation/CoreLocation.h>
   //两个属性
   NSString *Citystring;// 城市名
   @property(nonatomic,strong) CLLocationManager *locationManger;
   @property(nonatomic,strong) CLGeocoder *geocoder;
  #pragma mark 用户对地理位置的确定
  -(CLGeocoder *)geocoder
  {
        if (!_geocoder) {
           _geocoder = [[CLGeocoder alloc]init];
        }
        return _geocoder;
  }
  //1.创建定位管理者
  -(CLLocationManager *)locationManger
  {
         if (!_locationManger) {
            _locationManger = [[CLLocationManager alloc]init];
         }
        return _locationManger;
  }
#pragma mark - 定位
-(void)CityLoation
{
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"定位" style:UIBarButtonItemStylePlain target:self action:@selector(clickStatee)];
//2.挂代理
self.locationManger.delegate = self;
//3.对设备进行判断,因为安全要求高了(记得在Info.plist里面进行配置requestAlwaysAuthorization点击进去配置)
if ([[UIDevice currentDevice].systemVersion doubleValue]>=8.0) {
    NSLog(@"这是iOS8设备");
    [self.locationManger requestAlwaysAuthorization];
    }else
    {
          NSLog(@"不是iOS8的设备");
    }
 }
//4.状态监听
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
if (status == kCLAuthorizationStatusNotDetermined) {
    DFTLog(@"等待授权");
}else if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse )
{
    DFTLog(@"授权成功");
    //始终
    //        self.locationManger.desiredAccuracy = kCLLocationAccuracyBest;
    //        self.locationManger.distanceFilter = 10.0f;
    [self.locationManger startUpdatingLocation];
}
    else
   {
        DFTLog(@"定位失败");
   }
}
//5.调用定位信息
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
    CLLocation *location = [locations lastObject];
    [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
    for (CLPlacemark *placemark in placemarks) {
        //接收定位出来的地理位置
        Citystring = placemark.locality;
        DFTLog(@"=====%@",Citystring);
        self.navigationItem.leftBarButtonItem.title = Citystring;
      }
   }];
      [self.locationManger stopUpdatingLocation];(定位成功我们要关闭定位,减少性能的消耗)
}

3.点击上面的定位,我们可以自己获取位置


这时我们需要导入一个封装好的类 城市选择框架

#import "CityViewController.h"

点击上面的定位选择地理位置

#pragma mark - 城市选择
-(void)clickStatee
{
      CityViewController *controller = [[CityViewController alloc] init];    
      这个赋值是当前这个控制器的位置带到这个框架里面去,显示当前的位置
      controller.currentCityString = Citystring;
      //block传值(把值带出来)
      controller.selectString = ^(NSString *string){
      self.navigationItem.leftBarButtonItem.title = string;
      };
      [self presentViewController:controller animated:YES completion:nil];
}


目录
相关文章
|
1月前
|
JavaScript 前端开发
伪元素清除法会影响页面性能吗?
【10月更文挑战第27天】伪元素清除法在正常使用情况下对页面性能的影响不大,是一种较为高效和常用的清除浮动的方法。但在实际应用中,仍需要结合页面的具体情况和其他相关技术的使用来综合考虑性能优化问题,以确保页面能够达到最佳的性能表现。
|
7月前
|
移动开发 监控 Android开发
几个系统级崩溃问题和h5加载页面崩溃问题及解决方案
几个系统级崩溃问题和h5加载页面崩溃问题及解决方案
166 0
|
定位技术
使用定位技术,边界判断要谨慎
使用定位技术,边界判断要谨慎
124 0
锁定表格的另一种方法。
function SuoDing() { var rows = document.getElementById("txtRow"); var cols = document.getElementById("txtCol"); Show("DG",rows.value,cols.value); } 锁定的行数:。
726 0