首页 > 解决方案 > 照片库中的视频磁贴

问题描述

所以我一直在互联网上寻找一种方法来实现拥有视频磁贴的目标。我当前的实现实现了只显示视频的目标,但我必须先进入相机胶卷才能看到它们。我想要的只是有一个标题或专辑,上面只写视频,这样当你进去时,视频就在那里,并显示视频的数量而不是相机胶卷,它有所有东西的数量,然后当你进去的时候在那里你看到视频。我已将 imagepickerController 源类型更改为 photoLibrary,并且我已经更改了 mediaTypes 以正确考虑视频。因此,对于那些可能将其添加为答案的人来说,改变这一行并不是答案。

在此处输入图像描述

我已经添加了 imagepickercontroller 的代码

import Foundation
import Eureka
import MobileCoreServices

/// Selector Controller used to pick an video
open class ImagePickerController : UIImagePickerController, TypedRowControllerType, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    /// The row that pushed or presented this controller
    public var row: RowOf<URL>!
    //setting navigation controller delegate

    /// A closure to be called when the controller disappears.
    public var onDismissCallback : ((UIViewController) -> ())?

    open override func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
        allowsEditing = (row as? _VideoRow)?.allowEditor ?? false
        mediaTypes = [kUTTypeMovie as String, kUTTypeVideo as String]
    }
    public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        guard let videoURL = info[UIImagePickerControllerMediaURL] as? URL else {
            return
        }

        (row as? _VideoRow)?.videoURL = videoURL
        (row as? _VideoRow)?.value = videoURL
        onDismissCallback?(self)
    }

    open func imagePickerControllerDidCancel(_ picker: UIImagePickerController){
        onDismissCallback?(self)
    }

    public func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        viewController.navigationItem.title = "Videos"
    }

}

有什么问题吗,或者任何人都可以指出我要去的方向,向我展示如何创建视频拼贴或相册或向我展示一个示例。我最终想要这样的东西

在此处输入图像描述

虽然只有一个视频专辑

标签: iosswift

解决方案


与任何其他媒体类型一样,视频不是专辑,因此您不能仅从UIImagePickerController. 事实上,UIImagePickerController可能不会为您的用例削减它,因为它的功能非常有限。

基本上,就像在 macOS 桌面上一样,没有一个文件夹只包含您的视频。你必须查询它。在 iOS 中,您可以通过调用(当然将媒体类型设置为)来完成此fetchAssetsWithMediaType:options:操作。您可以使用谓词 ( ) 缩小结果范围或使用排序描述符 ( ) 对其进行排序,两者都设置为。您可以将整个内容包装在一个数据源中,该数据源还可以为您提供其他相册,例如相机胶卷或您需要的任何其他相册。这将是使用函数的自定义代码,仅返回您感兴趣的集合/资产。PHAsset.videoNSPredicateNSSortDescriptorPHFetchOptionsPHAsset*

一旦你有了数据源,你就可以用它来构建你的 UI。您可以使用简单的UITableView一些自定义单元格来完成您想要的 UI,但现在您还将负责获取每张专辑的专辑封面、标题、计数等。您还可以将该逻辑委托给您的数据源,以便您的 UI 仅从中读取。类中内置了很多异步行为,PHAsset*因此您需要确保正确处理这些行为。然后,您需要考虑远程 iCloud 内容,默认情况下不包括在内,因此您需要includeAssetSourceTypesPHFetchOptions.

所有这些都是相当大的工作量。特别是如果您希望有一种方便的方法或布尔值UIImagePickerController可以为您提供所需的东西。我不知道一个所以很长的路是我能想到的唯一方法。然而,那里有大量的图像选择器,其中很多都带有开放许可证。我建议你谷歌一些,看看是否能满足你的需求。如果没有,你可以随时DIY。


推荐阅读