使用SwiftUI构建视频App1-需求分析

环境

需求

有时候在电脑上下周好了电影,但是想用手机看,而系统又没有自带这套操作的工具,

于是就干脆自己写一个吧,顺便练习下刚学的Swift UI。

说明一下,这篇文章主要是演示Swift UI,工程里面使用的播放控件是基于IJKMediaFramework封装好的一个ViewController,在Github上找的这个工程 Swift-IJKPlayer小改了下,懒得自己再写🙃,也练习了Swift UI中使用UIKit。

完整工程代码:YYVedioPlayer,github单个文件限制100M,就放到gitlab去了

先来看下最终效果:

image

分析

需求很简单,思路也很简单,只需要2个界面就ok:

  1. 一个播放器界面
  2. 一个列表页可以展示指定目录的所有文件和子目录
    • 点击文件就将对应url传递给播放器界面
    • 点击目录就push一个新的列表页并展示对应的内容
    • 左滑删除功能

当我们打开App的时候,首先要展示的是Documents下面的内容,因为在Info.plist里面设置UIFileSharingEnabled = true后,电脑里的文件只能拷贝到App的这个目录。

下面就开始撸代码了。

Service层

首先,创建一个VedioManager,提供文件模型和相关的方法:

  • load方法根据传入的路径,返回File数组(目录放在数组前面,普通文件在后面)
  • delete方法删除指定的File,以及它包含的内容

里面用到了YYFile,这个其实是JohnSundell 写的库Files,很好用,我只是照着写了一遍,方便更好理解和使用。

另外他的博客全是Swift相关教程,很屌很炸天。

代码如下:

extension VedioManager {
    struct File: Hashable {
        let name: String
        let path: String
        let isFolder: Bool
    }
}

class VedioManager {
    static let dirDocument: URL = {
        let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        return urls[urls.endIndex - 1]
    }()
    
    static let root = dirDocument.path
    
    static func load(at path: String) -> [File] {
        if let folder = try? YYFile().createFolderIfNeeded(at: path) {
            let folders = folder.subfolders.map {
                File(name: $0.name, path: $0.path, isFolder: true)
            }
            
            let files = folder.files.map {
                File(name: $0.name, path: $0.path, isFolder: false)
            }
            
            return folders + files
        }
        
        return []
    }
    
    static func delete(_ file: File) -> Bool {
        do {
            try FileManager.default.removeItem(atPath: file.path)
            return true
        } catch {
            print(error)
        }
        
        return false
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 小狗钱钱读后感 读了这本书之后,就深刻想着自己能不能也可以进行养鹅生蛋的过程,现阶段有着几万的本金,可是没有地方投...
    没那达慕阅读 192评论 0 0
  • 题记_ 那天,我收到了一个远方的信封,你说:“欢迎你来到这里。” 像是沉睡突然苏醒,心里被光明洁净。那个时候喜欢是...
    鲜艳之未央阅读 385评论 0 2
  • ReactiveCocoa Objective-C 最后一个版本是 2.5. 从3以上就是 swift 的了。最近...
    取水阅读 365评论 0 0