快速处理位置权限

2023-12-19

我正在尝试实现一个基本的地图视图并将用户的当前位置作为注释添加到地图中。我已将 requestwheninuse 密钥添加到我的 info.plist 并导入 coreLocation。

在我的视图控制器的 did load 方法中,我有以下内容:

locManager.requestWhenInUseAuthorization()
var currentLocation : CLLocation

if(CLLocationManager.authorizationStatus() == CLAuthorizationStatus.AuthorizedWhenInUse){

    currentLocation = locManager.location
    println("currentLocation is \(currentLocation)")      
}
else{
    println("not getting location")
    // a default pin
}

我收到提示重新。检索位置的权限。当发生这种情况时,我得到的打印结果显示未获取位置,显然是因为它在用户有机会点击“确定”之前运行。如果我启动应用程序并返回,我可以检索位置并将其添加到地图中。但是,我希望当用户第一次点击“确定”时能够获取当前位置并将其添加到地图中。我怎样才能实现这个目标?我有以下添加引脚的方法:

func addPin(location2D: CLLocationCoordinate2D){
    self.mapView.delegate = self
    var newPoint = MKPointAnnotation()
    newPoint.coordinate = location2D
    self.mapView.addAnnotation(newPoint)
}

为此,您需要实现该方法didChangeAuthorizationStatus对于不久之后调用的位置管理器委托CLLocationManager已初始化。

首先,不要忘记在文件顶部添加:import CoreLocation

为此,请在使用该位置的类中添加委托协议。然后在viewDidLoad方法(或applicationDidFinishLaunching如果你在AppDelegate)初始化你的位置管理器并设置它的delegate财产给self:

class myCoolClass: CLLocationManagerDelegate {
    var locManager: CLLocationManager!

    override func viewDidLoad() {
        locManager = CLLocationManager()
        locManager.delegate = self
    }
 }

最后,在您之前声明的类的主体中实现 locationManager(_ didChangeAuthorizationStatus _) 方法,当授权状态更改时,一旦您的用户单击按钮,就会调用该方法。你可以这样实现:

private func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    switch status {
    case .notDetermined:
        // If status has not yet been determied, ask for authorization
        manager.requestWhenInUseAuthorization()
        break
    case .authorizedWhenInUse:
        // If authorized when in use
        manager.startUpdatingLocation()
        break
    case .authorizedAlways:
        // If always authorized
        manager.startUpdatingLocation()
        break
    case .restricted:
        // If restricted by e.g. parental controls. User can't enable Location Services
        break
    case .denied:
        // If user denied your app access to Location Services, but can grant access from Settings.app
        break
    default:
        break
    }
}

Swift 4 - 新的枚举语法

对于 Swift 4,只需将每个枚举大小写的第一个字母切换为小写(.notDetermined、.authorizedWhenInUse、.authorizedAlways、.restricted 和 .denied)

这样您就可以处理每种情况,无论用户只是授予许可还是撤销许可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速处理位置权限 的相关文章

随机推荐

  • LINQ to SQL 将不会生成可控制查询

    我正在使用 LINQ To Sql 不是实体框架 System Data Linq DataContext 库 访问 SQL Server 2005 数据库并使用 Net Framework 4 表 dbo Dogs 有一个类型为 CHAR
  • '{"errors":{"base":["禁止。需要用户。"]}}'

    大家好 我正在尝试上传它向我展示的用户个人资料图片 errors base 禁止 需要用户 这个错误请让我知道我做错了什么 QBContent uploadFileTask profilePic true new QBCallbackImp
  • docker swarm - 如何平衡 swarm 集群中已经运行的容器?

    我在 AWS 上有一个带有 2 个节点的 docker swarm 集群 我停止了这两个实例 最初启动了 swarm manager 然后启动了worker 在停止实例之前 我运行了一个服务 该服务在管理器和工作人员之间分配了 4 个副本
  • 保留标识符在编译的哪个阶段被保留?

    只是工作中的一点好奇心 在从事危险的工作时 我开始考虑各种编译器及其相关标准库的实现 以下是我的想法的进展 某些类别的标识符保留供 C 和 C 中的实现使用 编译器必须执行编译阶段 预处理 编译 链接 就好像它们是按顺序执行的一样 C 预处
  • 使用众多接口中的一个作为函数中的参数

    我有一个这样的函数 interface Interface1 one string interface Interface2 two string interface Interface3 three string type ManyInt
  • 自动计算与 Firebase Firestore Flutter 中存储的地理坐标数据的距离

    我已在 firestore 数据库中存储了项目的纬度和经度 字段为 item latitude 和 item longitude 因此 所有项目都有纬度和经度 我可以使用流来获取项目 例如 Stream
  • RSelenium 不工作

    我尝试使用以下命令安装并运行 R Selenium 包的简单示例 install packages RSelenium library RSelenium startServer checkForServer startServer rem
  • Javascript 中接受字母数字和一些特殊字符的正则表达式? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个像这样的 Javascript 正则表达式 x00 x7F 我想修改这个正则表达式 以便它接受所有大写和非大写字母 所有数字和一些
  • 使用 awk 或 sed 不可能进行负向前瞻,但仅 Perl 支持

    我有跨多行的文本 someabove text jpqpq mcvnmcv s ql pw lt lt lt lt lt lt uyuuey middle text jhasjh dsadsas grqywtrt klklk lt lt l
  • 什么是Environment.FailFast?

    什么是Environment FailFast 它有什么用 它用于终止应用程序 它是一种静态方法 可以立即终止应用程序 而不会被任何异常块捕获 Environment FastFail String 可以 实际上是一个很棒的调试工具 例如
  • 同一视图控制器中的 AWS AppSync 多个订阅不起作用 - iOS Swift

    仅供参考我发布了这个问题在 AWS AppSync 论坛中 以防将来 AWS 回答它 我一直在尝试制作一个简单的帖子应用程序 例如docs https docs aws amazon com appsync latest devguide
  • 在两个应用程序之间共享数据

    像这样 public class MyClass public static instance new MyClass private List
  • if 语句无法批处理(直接转到 else)

    我只是为我的批处理文件设置密码 但是 我的 if 语句不起作用 当我要求它检查我的密码是否正确时 即使我正确输入了密码 嗨 它也会转到 else 语句 这是我的代码中有问题的部分 if R hi goto b else echo acces
  • java相当于php的hmac-SHA1

    我正在寻找与此 php 调用等效的 java hash hmac sha1 test secret 我尝试过这个 使用java crypto Mac http docs oracle com javase 7 docs api javax
  • 如何获得正确的路径大小写?

    我有一个小但很痒的问题 如何在 Qt 中获取 Windows 路径的正确大小写 假设我有一条路c documents and settings wolfgang documents存储在一个QString str我想知道正确的情况 在这里C
  • 如何创建整数列表的二维列表并设置特定值

    如何创建一个像这样的矩阵 我不想使用numpy 0 1 2 3 4 5 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 我已经尝试过这个 这是错误的 class MinimiumEdits o
  • 我可以停止缩放时调整元素大小吗?

    我有一个标准网站 当用户放大 CTRL 时 如何防止元素调整大小 据我所知 没有办法防止用户放大时项目缩放 可能有一种方法捕获缩放事件 https stackoverflow com questions 995914 catch brows
  • UITableView 的“反弹区域”中的浅灰色背景

    Apple 的 iPhone 应用程序 例如 Music 和 Contants 使用 UITableView 中的搜索栏 当您向下滚动以使搜索栏向下移动时 滚动视图内容上方的空白区域具有浅灰色背景颜色 请参见屏幕截图 请注意 搜索栏顶部有一
  • 使用 python 在命令行上键入即可完成

    我想用 python 编写一个小型应用程序 目录 文件启动器 为了使其快速 我想自动完成 自动建议条目 但我想显示 这些建议会随着用户的输入而出现 根据我读到的有关 readline 模块完成的内容是 只能使用 完成热键 例如标签 有什么建
  • 快速处理位置权限

    我正在尝试实现一个基本的地图视图并将用户的当前位置作为注释添加到地图中 我已将 requestwheninuse 密钥添加到我的 info plist 并导入 coreLocation 在我的视图控制器的 did load 方法中 我有以下