使用 PHPhotoLibrary 将照片添加到自定义文件夹也会将照片添加到相机胶卷
Adding photo to custom folder using PHPhotoLibrary also adds photo to camera roll
我正在使用 PHPhotoLibrary 创建自定义文件夹并在其中添加图片。它工作正常,但我添加到自定义文件夹的图片也添加到 "camera roll" 文件夹中。我发现了这个旧线程 Add photos in custom album also added in default Album "Camera Roll",有人说这是正常行为,但由于评论是 3 年前的,我想知道在最新的 iOS 版本中是否有办法将图片仅添加到自定义文件夹。我已经搜索了一些文档来证实这一点,但没有成功。
我使用的代码:
class TMPhotoAlbum {
static let albumName = "Custom Album"
static let sharedInstance = TMPhotoAlbum()
var assetCollection: PHAssetCollection!
init() {
func fetchAssetCollectionForAlbum() -> PHAssetCollection! {
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "title = %@", TMPhotoAlbum.albumName)
let collection = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions)
if (collection.firstObject != nil) {
return collection.firstObject as! PHAssetCollection
}
return nil
}
if let assetCollection = fetchAssetCollectionForAlbum() {
self.assetCollection = assetCollection
return
}
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(TMPhotoAlbum.albumName)
}) { success, _ in
if success {
self.assetCollection = fetchAssetCollectionForAlbum()
}
}
}
func saveImage(image: UIImage, completion: (Bool, NSError?) -> Void) {
if assetCollection == nil {
return // If there was an error upstream, skip the save.
}
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let assetChangeRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
let assetPlaceholder = assetChangeRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection)
albumChangeRequest?.addAssets([assetPlaceholder!])
}, completionHandler: completion )
}
}
这仍然是正常和预期的行为:Photos/Videos 在用户创建的相册中仅引用 "Camera Roll" 中的原始相册。这个概念自 iOS 5 以来就存在,并且至今没有改变。
唯一 photos/videos 不属于相机胶卷的是 photos/videos 由 iTunes 同步的、共享的照片流和使用相机连接套件导入的项目。
我正在使用 PHPhotoLibrary 创建自定义文件夹并在其中添加图片。它工作正常,但我添加到自定义文件夹的图片也添加到 "camera roll" 文件夹中。我发现了这个旧线程 Add photos in custom album also added in default Album "Camera Roll",有人说这是正常行为,但由于评论是 3 年前的,我想知道在最新的 iOS 版本中是否有办法将图片仅添加到自定义文件夹。我已经搜索了一些文档来证实这一点,但没有成功。
我使用的代码:
class TMPhotoAlbum {
static let albumName = "Custom Album"
static let sharedInstance = TMPhotoAlbum()
var assetCollection: PHAssetCollection!
init() {
func fetchAssetCollectionForAlbum() -> PHAssetCollection! {
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "title = %@", TMPhotoAlbum.albumName)
let collection = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions)
if (collection.firstObject != nil) {
return collection.firstObject as! PHAssetCollection
}
return nil
}
if let assetCollection = fetchAssetCollectionForAlbum() {
self.assetCollection = assetCollection
return
}
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(TMPhotoAlbum.albumName)
}) { success, _ in
if success {
self.assetCollection = fetchAssetCollectionForAlbum()
}
}
}
func saveImage(image: UIImage, completion: (Bool, NSError?) -> Void) {
if assetCollection == nil {
return // If there was an error upstream, skip the save.
}
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let assetChangeRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
let assetPlaceholder = assetChangeRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection)
albumChangeRequest?.addAssets([assetPlaceholder!])
}, completionHandler: completion )
}
}
这仍然是正常和预期的行为:Photos/Videos 在用户创建的相册中仅引用 "Camera Roll" 中的原始相册。这个概念自 iOS 5 以来就存在,并且至今没有改变。
唯一 photos/videos 不属于相机胶卷的是 photos/videos 由 iTunes 同步的、共享的照片流和使用相机连接套件导入的项目。