我正试图将一个录制视频的文件路径和缩略图保存到文档目录中。然后,使用这些文件路径将这两个值设置为一个对象,以便我可以使用该对象来填充集合视图。使用我当前的代码(如下),在我录制视频后,视频路径被保存到文档目录中,并且视频路径和缩略图被设置到我的
然而,由于只有视频路径位于目录中,因此仅视频路径会在应用程序重新启动后保持不变,而缩略图并不会。我想把缩略图也保存在那里,但是我不知道怎样做,因为似乎只能将URL写入目录中。
这是我第一次使用文档目录,所以任何帮助都将不胜感激!我该如何将缩略图(UIImage)与其所属的视频一起写入我的文档目录?
以下是我的代码:
Post
对象中,缩略图在我的集合视图中正常显示。然而,由于只有视频路径位于目录中,因此仅视频路径会在应用程序重新启动后保持不变,而缩略图并不会。我想把缩略图也保存在那里,但是我不知道怎样做,因为似乎只能将URL写入目录中。
这是我第一次使用文档目录,所以任何帮助都将不胜感激!我该如何将缩略图(UIImage)与其所属的视频一起写入我的文档目录?
以下是我的代码:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let mediaType = info[UIImagePickerControllerMediaType] as! NSString
dismiss(animated: true, completion: nil)
if mediaType == kUTTypeMovie {
// Componenets for a unique ID for the video
var uniqueVideoID = ""
var videoURL:NSURL? = NSURL()
var uniqueID = ""
uniqueID = NSUUID().uuidString
// Get the path as URL
videoURL = info[UIImagePickerControllerMediaURL] as? URL as NSURL?
let myVideoVarData = try! Data(contentsOf: videoURL! as URL)
// Write the video to the Document Directory at myVideoVarData (and set the video's unique ID)
let docPaths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
let documentsDirectory: AnyObject = docPaths[0] as AnyObject
uniqueVideoID = uniqueID + "VIDEO.MOV"
let docDataPath = documentsDirectory.appendingPathComponent(uniqueVideoID) as String
try? myVideoVarData.write(to: URL(fileURLWithPath: docDataPath), options: [])
print("docDataPath under picker ", docDataPath)
print("Video saved to documents directory")
// Create a thumbnail image from the video (first frame)
let asset = AVAsset(url: URL(fileURLWithPath: docDataPath))
let assetImageGenerate = AVAssetImageGenerator(asset: asset)
assetImageGenerate.appliesPreferredTrackTransform = true
let time = CMTimeMake(asset.duration.value / 3, asset.duration.timescale)
if let videoImage = try? assetImageGenerate.copyCGImage(at: time, actualTime: nil) {
// Add thumbnail & video path to Post object
let video = Post(pathToVideo: URL(fileURLWithPath: docDataPath), thumbnail: UIImage(cgImage: videoImage))
posts.append(video)
print("Video saved to Post object")
}
}
}