1、定位设置

2、定位页面逻辑

1、定位设置

2、定位页面逻辑

1)、第一次进入该VC,在 viewDidLoad 调用刷新页面 refreshLocationView 。这时用户还没决定,会刷出“正常”的view

- (void)refreshLocationView{
// 定位服务正常 && 定位被用户拒绝
if([CLLocationManager locationServicesEnabled] &&
[CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied ) {
// "提示用户开启定位"view
if (self.用户拒绝view == nil) {
[self.view addSubview:self.deniedView];
}
}else{
// "用户的正常定位"View
if (self.用户拒绝view) {
[self.用户拒绝view removeFromSuperview];
}
// 开始定位( 高德 的 startUpdatingLocation )
[self 是否创建管理者,并开始定位];
// 按需显示hud
[self showHud]
}
}

  

思路:1、需要判断 “用户拒绝view”的存在,减少创建、删除等重复操作。

   2、 “用户拒绝view”需要覆盖在“正常显示view”的上面(最后被addSubview)

2)、弹出定位警告窗给用户选

  2-1)、如果用户选允许,那么没问题。

  2-2)、如果用户选不允许,再回调里,再刷新上面的方法,从而刷出“用户拒绝View”,并添加到最上面

    注意:如当前“正常view”显示Hud,在等待用户同意。然后用户拒绝,这个时候,需要隐藏Hud,并刷出“用户拒绝View”。

       而,隐藏hud,不能写在回调外面,因为刚切换过来,定位状态会更新,所以需要在当前状态是拒绝里,隐藏Hud。

//amap 是 高德 的方法
//- (void)amapLocationManager:(AMapLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
if (status == kCLAuthorizationStatusDenied) {
// 如有Hud,可隐藏Hud
[self hideHud]; [self refreshLocationView];
}
}

3)、“用户拒绝View”设置按钮,跳转到隐私设置。

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
options:@{}
completionHandler:nil];
}

4)、从隐私设置里跳转回来,不会调用 viewWillAppear: 系列方法,所以需要加通知,再刷新view

[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(refreshLocationView)
name:UIApplicationWillEnterForegroundNotification
object:nil];

5)、最后dealloc移除通知

- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

6)、可选,隐藏Hud。

  6-1)、如果只要经纬度,得到经纬度回调里,隐藏Hud。

// 高德 的 定位成功回调
- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode
{
// 停止定位(高德 的 stopUpdatingLocation) // 看需请求搜索附近建筑 (高德 的 AMapPOIAroundSearch: ) }

  6-2)、如要附近建筑,在得到经纬度的回调里,再请求附近数据 AMapPOIAroundSearchRequest 。

      请求成功后,得到附近建筑回调,再隐藏Hud

// 高德 的 搜索成功回调
- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response
{
[self hideHud];
}

  

  

iOS:位置相关(18-03-09更)的更多相关文章

  1. iOS系列 基础篇 03 探究应用生命周期

    iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...

  2. iOS网络相关零散知识总结

    iOS网络相关零散知识总结 1. URL和HTTP知识 (1) URL的全称是Uniform Resource Locator(统一资源定位符). URL的基本格式 = 协议://主机地址/路径   ...

  3. iOS回顾笔记(03) -- 自定义View的封装和xib文件的使用详解

    iOS回顾笔记(03) -- 自定义View的封装和xib文件的使用详解 iOS开发中,我们常常将一块View封装起来,以便于统一管理内部的子控件.如iOS回顾笔记(02)中的"书" ...

  4. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  5. Android View各种尺寸位置相关的方法探究

    Android View各种尺寸位置相关的方法探究 本来想做一个View间的碰撞检测之类的. 动手做了才发现不是想象的那么简单. 首先,写好了碰撞检测的工具类如下: package com.mengd ...

  6. Docker 18.03 Centos7.6 安装 内网

    首先访问https://download.docker.com/linux/centos/7/x86_64/stable/Packages/获取对应版本的rpm包docker包docker-ce-18 ...

  7. iOS LBS相关: 定位和中国特色的位置偏移纠正

    LBS模块,首先当然是定位,获取自己所在的位置.主要用到的就是CLLocationManager,实例一个,然后调用startUpdatingLocation即可.其中可以指定精度CLLocation ...

  8. iOS:小技巧(19-02-12更)

    记录下一些不常用技巧,以防忘记,复制用. 1.UIImageView 和UILabel 等一些控件,需要加这句才能成功setCorn _myLabel.layer.masksToBounds = YE ...

  9. ios 缓存相关信息收集

    链接:http://www.cnblogs.com/pengyingh/category/353093.html 使用NSURLCache让本地数据来代替远程UIWebView请求 摘要: 原文作者: ...

随机推荐

  1. JQuery和html+css实现带小圆点和左右按钮的轮播图

    是的!你没看错!还是轮播图.这次的JQuery的哟!! CSS代码: /*轮播图 左右按钮 小白点*/ #second_div{ margin-top: 160px; } .img_box{ over ...

  2. Apose.Cell导出的Excel数字格式正确显示

    使用Apose.Cell导出Excel时假如导出的如上图:边框左上角有绿色三角形区域,选中某个区域会出现感叹号询问是否要将文本转换为数字 那么在代码中使用PutValue方法时,后面的bool参数设为 ...

  3. zabbix共享内存报错cannot create semaphore set

    zabbix共享内存报错 cannot open log: cannot create semaphore set: [28] No space left on device 报错原因: kernel ...

  4. 需求分析之WBS

    我们的产品就是当你把废旧的塑料瓶和电池投入回收箱中会产生能量,那么这能量可以干嘛呢那就通过我们的APP进行扫码记录所产生的能量这写能量可以在我们的APP的换吧中进行兑换用户所需要的东西比如:共享单车的 ...

  5. IDEA创建maven项目时,maven太慢-archetypeCatalog=internal

    创建项目时候加上archetypeCatalog=internal 参数, archetypeCatalog表示插件使用的archetype元数 据,不加这个参数时默认为remote,local,即中 ...

  6. 如何查看服务器CPU核心数和线程数

    知道服务器CPU型号,那么我们如何在服务器里面查看服务器CPU核心数和线程数呢? 步骤: 先用鼠标右键点击屏幕最下方的任务栏空白处.会弹出一个菜单. 在菜单中用鼠标左键点选“启动任务管理器”. 点击任 ...

  7. Visual Studio强行修改运行平台和注意事项

    默认情况下,会发现项目属性中只有一个Any CPU可供选择,无法修改运行平台. 解决方法如下: 右键“解决方案”,选择“属性”,此时发现每一个项目的平台依然只有Any CPU,点击右上角“配置管理器” ...

  8. 企业级Nginx增加日志选项

    日志介绍 目的:将用户的访问信息记录到指定的文件中由ngx_http_log_module模块负责 访问日志参数: access_log:指定日志文件的路径和使用何种日志格式记录日志 log_form ...

  9. canvas抛物线运动demo

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. UVa 12661 - Funny Car Racing(Dijkstra)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...