作者:IOSCREATOR, 原文链接 ,原文日期:2016-10-13
译者: 冬瓜 ;校对:Cwift;定稿: CMB
在 iOS 中用户的位置信息被视为个人隐私,所以在获取时需要向用户请求权限。本篇教程将讲述向用户请求该权限的步骤。开发环境为 Xcode 8 Beta,运行环境为 iOS 10。
打开 Xcode 然后创建一个新的单视图应用(Single View Application)。
如图所示,点击 Next 。将工程名命名为 IOS10RequestingPermissionTutorial ,自行填写 Organization Name 和 Organization Identifier 。选择 Swift 作为编程语言,适配设备选择 iPhone 。
编辑 Storyboard 。将一个按钮控件拖入主视图。双击按钮视图编辑文字改为 “Get Location”。如下图所示:
打开 Assistant Editor 并确保 ViewController.swift 文件可见。按住 Ctrl 键从按键控件拖拽到 ViewController 这个类中来创建一个 Action。
转到 ViewController.swift 文件并添加以下代码导入 Conre Location 框架。
import CoreLocation
让 ViewController 遵循 CLLocationManagerDelegate 协议。并修改该类的定义:
class ViewController: UIViewController, CLLocationManagerDelegate {}
增加以下属性:
let locationMgr = CLLocationManager()
CLLocationManager 是原生的 GPS 坐标管理对象。接下来按照以下代码来实现 getMyLocation 方法:
@IBAction func getLocation() { // 1 let status = CLLocationManager.authorizationStatus() // 2 if status == .notDetermined { locationMgr.requestWhenInUseAuthorization() return } // 3 if status == .denied || status == .restricted { let alert = UIAlertController(title: "Location Services Disabled", message: "Please enable Location Services in Settings", preferredStyle: .alert) let okAction = UIAlertAction(title: "OK", style: .default, handler: nil) alert.addAction(okAction) present(alert, animated: true, completion: nil) return } // 4 locationMgr.delegate = self locationMgr.startUpdatingLocation() }
然后实现 CLLocationManager 的代理方法。
// 1 func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let currentLocation = locations.last! print("Current location: /(currentLocation)") } // 2 func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("Error /(error)") }
要在 app 运行时请求 GPS 定位权限,需要在 info.plist 中设置新的属性键(Key)。单击鼠标右键选择添加行,并输入以下值:
在 Build 并运行工程时,app 会主动寻求定位授权:
点开控制台中的位置箭头,选择一个预定义的位置。控制台会打印当前的 GPS 定位。
Current location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:27 PM Central European Summer Time Current location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:28 PM Central European Summer Time Current location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:29 PM Central European Summer Time Current location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:30 PM Central European Summer Time Current location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:31 PM Central European Summer Time Current location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 9/12/16, 3:25:32 PM Central European Summer Time
你可以在 Github 上的 ioscreator 仓库中下载 IOS10RequestingPermissionTutorial 的源码。
本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问http://swift.gg。