我正在尝试使用一瞥记录一个UIView。它成功地将其保存到应用程序的文档文件夹,但我也需要它来保存到用户的相机卷。它不是保存到相机卷,我是一个警报,允许应用程序访问我的相机卷,但它没有保存在任何相册。
我尝试了大量的代码,从以下几个方面:
[self.glimpse startRecordingView:self.view onCompletion:^(NSURL *fileOuputURL) {
NSLog(@"DONE WITH OUTPUT: %@", fileOuputURL.absoluteString);
UISaveVideoAtPathToSavedPhotosAlbum(fileOuputURL.absoluteString,nil,nil,nil);
}];
To此文:
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:fileOuputURL
completionBlock:^(NSURL *assetURL, NSError *error){NSLog(@"hello");}];
日志打印,但它没有将视频保存到相机卷。
如果有人知道我这不是工作,请告诉我!谢谢!
发布于 2022-10-26 12:45:02
我与UISaveVideoAtPathToSavedPhotosAlbum面临的一个问题是视频路径扩展。为了将视频从应用程序中下载并保存到照片中,如果它的“快速时间”视频,那么它会给出错误的ALAssetsLibraryErrorDomain / PHPhotosErrorDomain。下面的工作为我工作。改变路径视频扩展为".mp4“解决了我的问题。
public func download(url: URL, completion: @escaping ((URL?, Error?) -> Void)) {
let cachesDirectoryUrl = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!
let pathExtension = url.pathExtension == "quicktime" ? "mp4" : url.pathExtension
var lastPathComponent = url.lastPathComponent.components(separatedBy: ".").first
lastPathComponent = lastPathComponent?.appending(".\(pathExtension)")
let destinationUrl = cachesDirectoryUrl.appendingPathComponent(lastPathComponent ?? "")
if url.isFileURL {
completion(nil, nil)
} else if FileManager.default.fileExists(atPath: destinationUrl.path) {
completion(destinationUrl, nil)
} else {
URLSession.shared.downloadTask(with: url) { (location, response, error) in
guard let tempLocation = location, error == nil else {
completion(nil, error)
return
}
try? FileManager.default.removeItem(at: destinationUrl)
do {
try FileManager.default.moveItem(at: tempLocation, to: destinationUrl)
completion(destinationUrl, nil)
} catch let error as NSError {
completion(nil, error)
}
}.resume()
}
}
https://stackoverflow.com/questions/31691178
复制相似问题