Position
是一个轻量级的 iOS 定位库。
特性 | |
---|---|
☄ | “单次” 可自定义的位置请求 |
🌌 | 基于距离和时间的定位过滤 |
🛰 | 位置跟踪支持 |
🧭 | 设备朝向支持 |
🔒 | 权限检查和响应支持 |
🌐 | 地理空间数学实用工具 |
🏙 | 地点数据格式化实用工具 |
📊 | 自动低电量定位模式 |
📍 | vCard 位置创建 |
🔭 | 基于多组件观察者的架构 |
Position
可以通过 Swift Package Manager 或 Cocoa 依赖管理工具 CocoaPods 进行安装。或者,您可以直接将 Position
源代码文件复制到您的 Xcode 项目中。
# CocoaPods
pod "Position", "~> 0.7.0"
# Carthage
github "piemonte/Position" ~> 0.7.0
# SwiftPM
let package = Package(
dependencies: [
.Package(url: "https://github.com/piemonte/Position", majorVersion: 0)
]
)
示例项目提供了如何集成 Position
的示例,或者您可以按照以下步骤操作。
确保您的应用程序的 Info.plist
文件包含位置使用描述、所需的设备功能“location-services”以及所需的后台模式(如果需要)。
请参阅示例项目以获取示例。
导入文件并将您的组件设置为 PositionObserver,如果您希望它成为委托。
import Position
class ViewController: UIViewController, PositionObserver {
// ...
让组件将自身添加为观察者并配置适当的设置。
override func viewDidLoad() {
super.viewDidLoad()
// ...
Position.shared.addObserver(self)
Position.shared.distanceFilter = 20
if Position.shared.locationServicesStatus == .allowedWhenInUse ||
Position.shared.locationServicesStatus == .allowedAlways {
Position.shared.performOneShotLocationUpdate(withDesiredAccuracy: 250) { (location, error) -> () in
print(location, error)
}
} else {
// request permissions based on the type of location support required.
Position.shared.requestWhenInUseLocationAuthorization()
// Position.shared.requestAlwaysLocationAuthorization()
}
}
如果需要,观察委托。
func position(position: Position, didChangeLocationAuthorizationStatus status: LocationAuthorizationStatus) {
// location authorization did change, often this may even be triggered on application resume if the user updated settings
}
请记住,在创建基于位置的应用程序时,请尊重用户的隐私,并对您如何使用他们的位置负责。如果您的应用程序需要位置权限 kCLAuthorizationStatusAuthorizedAlways
,则尤其如此。
要使用 vCard 分享位置,只需在任何位置对象实例上调用 vCard 函数即可。
let fileURL = location.vCard()
Position 捆绑了各种 Core Location 的扩展,例如地理空间数学实用工具。例如,可以计算两个坐标点之间的方向,从而实现 方向视图 和其他航路点表示。
您可以在这里找到文档。文档使用 jazzy 生成,并托管在 GitHub-Pages 上。
Position 在 MIT 许可证下可用,有关更多信息,请参阅 LICENSE 文件。