我正在使用" PHAsset"用于获取相机胶卷资产。我正在使用
PHAsset.fetchAssetsWithMediaType(.Image, options: options)
用于获取所有图库图像。但我想同时获取所有图像和视频并在集合视图中显示(如Instagram相机视图)。
任何人都可以告诉我该怎么做?
答案 0 :(得分:6)
实际解决方案(swift 4,可能是swift 3): 在您的viewDidLoad或适用于您的案例调用的地方,checkAuthorizationForPhotoLibraryAndGet()
private func getPhotosAndVideos(){
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate",ascending: false)]
fetchOptions.predicate = NSPredicate(format: "mediaType = %d || mediaType = %d", PHAssetMediaType.image.rawValue, PHAssetMediaType.video.rawValue)
let imagesAndVideos = PHAsset.fetchAssets(with: fetchOptions)
print(imagesAndVideos.count)
}
private func checkAuthorizationForPhotoLibraryAndGet(){
let status = PHPhotoLibrary.authorizationStatus()
if (status == PHAuthorizationStatus.authorized) {
// Access has been granted.
getPhotosAndVideos()
}else {
PHPhotoLibrary.requestAuthorization({ (newStatus) in
if (newStatus == PHAuthorizationStatus.authorized) {
self.getPhotosAndVideos()
}else {
}
})
}
}
1)确保使用mediaType =%d而不是mediaType ==%d
2)确保您确实拥有授权并可以访问照片库,否则它将无声地失败。
答案 1 :(得分:4)
可以免费使用'111111111111111 '
。
NSPredicate
答案 2 :(得分:3)
这可能对您有用:
public enum PHAssetMediaType : Int {
case Unknown
case Image
case Video
case Audio
}
媒体类型定义为:
OptionSetType
因为它不是PHAsset.fetchAssetsWithMediaType
,您不能像位域一样使用它并将它们合并为PHAsset.fetchAssetsWithOptions
,但{{1}}可能适合您。只是准备从结果集中过滤掉音频类型。