PHAsset 从一张专辑复制到另一张专辑
PHAsset copy from one album to another
我想将资产从一个相册复制到另一个相册,而不要求图像数据或视频数据,也就是说,只将资产从一个相册复制到另一个相册
我做什么
let asset = PHAsset.fetchAssets(withLocalIdentifiers: [assetLocalIdentifier], options: .none).firstObject
PHPhotoLibrary.shared().performChanges({
guard let albumChangeRequest = PHAssetCollectionChangeRequest(for: album) else { return }
albumChangeRequest?.addAssets([asset] as NSFastEnumeration)
})
专辑是我的自定义专辑
我崩溃了
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectID]: unrecognized selector sent to instance 0x600002339340'
ofc 资产存在,相册存在,如果我将视频保存到文件并使用 creationRequestForAssetFromVideo...
我通过 creationRequestForAssetFromVideo 保存没有问题,但是为此我需要先保存这个视频,我想复制用户选择的内容而不等待视频保存,这甚至可以吗?
okey 我找到方法了)
视频
PHImageManager.default().requestAVAsset(forVideo: asset, options: PHVideoRequestOptions()) { (avAsset, _, _) in
if let assetURL = avAsset as? AVURLAsset {
_url = assetURL.url
....
图片
asset.requestContentEditingInput(with: PHContentEditingInputRequestOptions()) { (contentEditingInput, _) in
if let url = contentEditingInput?.fullSizeImageURL {
_url = url
....
现在是图片
PHAssetChangeRequest.creationRequestForAssetFromImage
或视频
PHAssetChangeRequest.creationRequestForAssetFromVideo
解释:
我们不能直接复制资产,但是我们可以从资产在系统中的位置获取路径,并用它来复制到我们的相册
编码愉快 ;)
我想将资产从一个相册复制到另一个相册,而不要求图像数据或视频数据,也就是说,只将资产从一个相册复制到另一个相册
我做什么
let asset = PHAsset.fetchAssets(withLocalIdentifiers: [assetLocalIdentifier], options: .none).firstObject
PHPhotoLibrary.shared().performChanges({
guard let albumChangeRequest = PHAssetCollectionChangeRequest(for: album) else { return }
albumChangeRequest?.addAssets([asset] as NSFastEnumeration)
})
专辑是我的自定义专辑
我崩溃了
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectID]: unrecognized selector sent to instance 0x600002339340'
ofc 资产存在,相册存在,如果我将视频保存到文件并使用 creationRequestForAssetFromVideo...
我通过 creationRequestForAssetFromVideo 保存没有问题,但是为此我需要先保存这个视频,我想复制用户选择的内容而不等待视频保存,这甚至可以吗?
okey 我找到方法了)
视频
PHImageManager.default().requestAVAsset(forVideo: asset, options: PHVideoRequestOptions()) { (avAsset, _, _) in
if let assetURL = avAsset as? AVURLAsset {
_url = assetURL.url
....
图片
asset.requestContentEditingInput(with: PHContentEditingInputRequestOptions()) { (contentEditingInput, _) in
if let url = contentEditingInput?.fullSizeImageURL {
_url = url
....
现在是图片
PHAssetChangeRequest.creationRequestForAssetFromImage
或视频
PHAssetChangeRequest.creationRequestForAssetFromVideo
解释: 我们不能直接复制资产,但是我们可以从资产在系统中的位置获取路径,并用它来复制到我们的相册
编码愉快 ;)