我需要使用UIImagePickerController从PhotoLibrary拾取的图像中获取位置数据(纬度和经度坐标)。 Existing answers建议使用fetchAssetsWithALAssetURLs,但iOS 8至11不建议使用,所以我想知道还有什么选择吗?
谢谢!
答案 0 :(得分:2)
这对我有用。对于新的iOS版本,请使用以下代码行。
var asset: PHAsset?
asset = info[UIImagePickerControllerPHAsset] as? PHAsset
请注意asset = nil
,如果用户由于PHAsset数据敏感而未授予访问其照片库的权限。
要获得许可,请相应地编辑Info.plist
,然后使用PHPhotoLibrary.requestAuthorization()
来请求许可。
答案 1 :(得分:0)
如果您仅支持iOS 11及更高版本,则可以使用PHAsset
键直接获取.phAsset
。仅在需要支持iOS 10或更早版本时,才需要使用PHAsset fetchAssetsWithALAssetURLs
。
一旦有了PHAsset
参考,就可以访问location
属性来获取图像的坐标。
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
var asset: PHAsset?
if #available(iOS 11.0, *) {
asset = info[.phAsset] as? PHAsset
} else {
if let url = info[.referenceURL] as? URL {
let result = PHAsset.fetchAssets(withALAssetURLs: [url], options: nil)
asset = result.firstObject
}
}
if let asset = asset {
if let location = asset.location {
print("Image location is \(location.coordinate.latitude), \(location.coordinate.longitude)")
}
}
}