swift4 从相册中获取视频数组

简介: 注意访问权限/// 从相册中获取视频数组----**- private func getVideosFromAlbum(result: @escaping (([ContestChooseVideo.

注意访问权限

/// 从相册中获取视频数组----**-
    private func getVideosFromAlbum(result: @escaping (([ContestChooseVideo.Video]) -> Void)){
        var videos: [ContestChooseVideo.Video] = []
        // 获取所有资源的集合,并按资源的创建时间排序如果不写就是乱序,并不好使
//        let options = PHFetchOptions()
//        options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
        
        let option = PHVideoRequestOptions()
        option.version = .current
        option.deliveryMode = .automatic
        option.isNetworkAccessAllowed = true
        
        let manager = PHImageManager.default()
        let assets: PHFetchResult = PHAsset.fetchAssets(with: .video, options: nil)
        
        var tempCount = assets.count

        // 获取视频
        for i in 0..<assets.count {
            
            let asset = assets.object(at: i)
            manager.requestAVAsset(forVideo: asset, options: option) { (avasset, audioMix, array) in
                // 为了防止多次回调
                tempCount = tempCount - 1
                
                guard let urlAsset: AVURLAsset = avasset as? AVURLAsset else {
                    if tempCount == 0 {
                       showFailure("获取视频失败")
                       result([])
                    }
                    
                    return
                }
            
                var model = ContestChooseVideo.Video()
                model.asset = asset
                model.avSet = avasset
                model.videoUrl = urlAsset.url
                model.image = UIImage.thumbnailImageForVideo(videoURL: urlAsset.url, time: 0.5)
                model.duration = CMTimeGetSeconds(urlAsset.duration)
                model.creationDate = asset.creationDate
                videos.append(model)
                
                if tempCount == 0 {
                    // 把视频按照日期排序
                    let newVideos = videos.sorted(by: { (video1, video2) -> Bool in
                        guard let date1 = video1.creationDate,
                            let date2 = video2.creationDate else {
                            return true
                        }
                        return date1 < date2
                        })
                    result(newVideos)
                }
                
            }
        }
    }

model:

enum ContestChooseVideo { }

extension ContestChooseVideo {
    struct Video {
        var image: UIImage?             // 视频封面
        var duration: Double?           // 视频时长
        var asset: PHAsset?             // 操作信息的对象
        var videoUrl: URL?              // 视频本地地址
        var avSet: AVAsset?             // 剪辑控制
        var creationDate: Date?         // 视频创建时间
    }
}

目录
相关文章
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
89 2
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
181 2
|
3月前
|
监控 Swift iOS开发
局域网计算机监控软件中利用Swift构建iOS端的移动监控应用
在局域网计算机监控软件的开发中,构建iOS端的移动监控应用是一项关键任务。本文将介绍如何利用Swift语言实现这一目标,通过多个代码示例展示关键功能的实现。
223 1
|
3月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
65 0
|
5月前
|
JavaScript 前端开发 PHP
用swift开发ios移动端app应用初体验
直接跟着 apple 官方的 SwiftUI 教程跑的,写惯了 javascript 奔放的代码,很多语法理解起来还是有点费劲
57 1
|
7月前
|
Swift iOS开发
iOS OC混编Swift 后者无法走断点
iOS OC混编Swift 后者无法走断点
49 0
|
12月前
|
Swift iOS开发
IOS使用Swift加载Xib文件
IOS使用Swift加载Xib文件
245 0
|
Swift iOS开发
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
219 0
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
|
Swift 数据安全/隐私保护 iOS开发
iOS开发 - swift通过Alamofire实现https通信
iOS开发 - swift通过Alamofire实现https通信
343 0
iOS开发 - swift通过Alamofire实现https通信
|
Swift iOS开发 容器
iOS 仿支付宝银行卡界面(支持Swift/OC)
在有支付相关的APP中,都有对应的钱包,虽然现在的支付宝,微信支付很流行,但是都是需要绑定自己的银行卡,那么这个银行卡的卡包页面该怎么实现呢?在网上找了许久也没有找到合适的,那就索性自己造轮子。
323 0

相关课程

更多