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. Oracle 通过出生日期计算年龄

    方法一: SELECT TRUNC(months_between(sysdate, birth)/12) AS age from mytable 方法二: select TRUNC((to_char( ...

  2. How do I use the API correctly

    1:打开帮助文档2:点击显示,找到索引,看到输入框3:你要学习什么内容,你就在框框里面输入什么内容 举例:Random4:看包 java.lang包下的类在使用的时候是不需要导包的5:看类的描述 Ra ...

  3. 小程序-报错 xxx is not defined (已解决)

    小程序-报错 xxx is not defined (已解决) 问题情境: 这样一段代码,微信的小程序报错 is not defined 我 wxml 想这样调用 //wxml 代码 <view ...

  4. Bootstrap 在线引用

    Bootstrap 3.3.0 js 文件 <script src="http://cdn.bootcss.com/bootstrap/3.3.0/js/bootstrap.min.j ...

  5. Android 退出app,后台推送的服务也停止了,怎么可以做到不停止后台服务呢?

    service粘性等的那4种方式试了,三星的可以,小米老款手机可以,新款不行,华为新款也不行,还有魅族什么的,都不行,新款的手机上都有一个安全中心,只有在安全中心里面添加上允许app自启动才可以 怎么 ...

  6. [转]乔布斯的薄伽梵歌 Steve’s Bhagavat Gita

    SRC: http://www.brucejia.net/ 2014年4月4日未分类apple.ios.steve jobs 编辑 Your time is limited, so don't was ...

  7. 懒散的态度就是一剂慢性毒药——《我是一只IT小小鸟》读后感(第四周)

    进度拖延是所有团队项目的噩梦,有效的进度管理也许能够解决问题,但我认为更根本的是整个团队的工作态度.大家都希望能够加入一个人人都认真负责积极完成任务的团队,但比如何找这样一个团队更重要的是如何将自己变 ...

  8. [翻译] JHChainableAnimations

    JHChainableAnimations - (void)animationType_01 { /* * 缩放到0.8倍(执行spring动画效果的缩放)持续时间0.5s,完成了之后移动100的距离 ...

  9. Windows环境下使用Nginx搭建负载均衡

    前言 最近没有什么事情,喜欢总结并学习东西!前几天写来一个Session共享,那么我们为什么需要Session共享?因为我们的应用程序分布在多个服务器上,为了合理分配用户的请求,就需要用到负载均衡技术 ...

  10. oracle sql练习 菜鸟入门!

    进入公司 ,首先是进行SQL培训 一下是针对oracle的emp与dept表进行的基础查询 --1.选择部门30中的所有员工: ; --2.列出所有办事员(CLERK)的姓名,编号和部门编号: sel ...