我正在尝试实现自定义图像选择器控制器,或者更确切地说是视频选择器控制器,这是用于获取照片库中所有视频的代码:
fileprivate func fetchVideos() {
let allVideos = PHAsset.fetchAssets(with: .video, options: assetsFetchOptions())
DispatchQueue.global(qos: .background).async {
allVideos.enumerateObjects({ (asset, count, stop) in
let imageManager = PHImageManager.default()
imageManager.requestAVAsset(forVideo: asset, options: nil, resultHandler: { (asset, audioMix, info) in
guard let asset = asset as? AVURLAsset, let image = asset.previewImage() else { return }
print("Got a video: \(asset.duration.cmTimeString)")
// let medium = Medium(previewImage: image, duration: asset.duration)
// self.media.append(medium)
})
})
}
}
很明显,这需要用户的许可才能访问照片库,这是我们第一次这样做,它会弹出警报,让用户给予许可。
但是,在获得许可后,控制器实际上并没有开始加载视频。我需要关闭控制器并第二次表示它(当权限已经给出时),以便开始正确加载视频。
问题:如何在获得许可后立即正确加载视频,而不必解雇并再次展示(就像内置的UIImagePickerController
一样?
答案 0 :(得分:0)
这可以通过检查是否有授权来完成,如果没有,则使用带有完成处理程序的PHPhotoLibrary.requestAuthorization来监视结果。
类似这样的东西:
if PHPhotoLibrary.authorizationStatus() == .authorized {
// Load image/ video function
} else {
PHPhotoLibrary.requestAuthorization { status in
if status == .authorized {
// Load image/ video function
} else {
// Show error message
}
}
}