Swift从相机胶卷中获取图像和视频

时间:2016-07-06 19:22:59

标签: swift phasset

我正在使用" PHAsset"用于获取相机胶卷资产。我正在使用

PHAsset.fetchAssetsWithMediaType(.Image, options: options)

用于获取所有图库图像。但我想同时获取所有图像和视频并在集合视图中显示(如Instagram相机视图)。

任何人都可以告诉我该怎么做?

3 个答案:

答案 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}}可能适合您。只是准备从结果集中过滤掉音频类型。