我使用的是帶有swift的Xcode 6.3(我認爲是1.2版本)。我的應用程序從網上的自定義服務器下載照片。然後,它需要將具有給定文件名的照片保存到通過照片框架創建的自定義相冊中。我需要能夠控制照片/文件名,因爲我跟蹤了我在數據庫中下載的哪些照片,並且以後需要按照名稱查看它們。 我創建了一個自定義的PhotoAlbum類,我試圖包裝與相冊交互的所有邏輯。一旦我下載了一張照片,我可以調用以下代碼,並且它的工作原理與創建相冊和保存照片一樣遠,但正如您在savePhoto()方法中注意到的那樣,我不知道在保存時如何使用photoName變量命名照片。最後,我還需要知道如何通過名稱以及loadPhoto()方法來檢索照片。感謝您提供任何幫助/建議。如何在通過iOS Swift照片框架保存照片時命名照片
通過MyAlbum讓=天地我的相簿( 「通過MyAlbum」)
myAlbum.savePhoto(downloadedPhoto,12)
class PhotoAlbum {
var albumName: String = ""
var albumExists: Bool = false
var assetCollection: PHAssetCollection!
var photosAsset: PHFetchResult!
init(albumName: String) {
self.albumName = albumName
self.initializeAlbum()
}
private func initializeAlbum() {
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "title = %@", self.albumName)
let collection: PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions)
if let firstObject: AnyObject = collection.firstObject {
self.albumExists = true
self.assetCollection = collection.firstObject as! PHAssetCollection
if let ac = self.assetCollection {
self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil)
}
println("\(self.albumName) album exists")
}
else {
var albumPlaceHolder: PHObjectPlaceholder!
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let request = PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(self.albumName)
albumPlaceHolder = request.placeholderForCreatedAssetCollection
}, completionHandler: { (success: Bool, error: NSError!) in
self.albumExists = success
if success {
let collection = PHAssetCollection.fetchAssetCollectionsWithLocalIdentifiers([albumPlaceHolder.localIdentifier], options: nil)
self.assetCollection = collection.firstObject as! PHAssetCollection
if let ac = self.assetCollection {
self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil)
}
println("\(self.albumName) album made")
}
else {
println("Failed to create \(self.albumName) Album!!!!!!")
}
})
}
}
func savePhoto(image: UIImage, photoID: Int) {
let photoName = String(photoID)+".jpg"
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let assetRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
let assetPlaceholder = assetRequest.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection, assets: self.photosAsset)
albumChangeRequest.addAssets([assetPlaceholder])
}, completionHandler: { (success: Bool, error: NSError!) in
print(success ? "image added" : "failed to add image")
})
}
func loadPhoto(photoID: Int64) -> UIImage {
let photoName = String(photoID)+".jpg"
return UIImage(named: "no_photo")!
}
func renameAlbum(newAlbumName: String) {
// need to create the new album and move all photos to that album then remove the old album
}
func reloadPhotos() {
if let ac = self.assetCollection {
self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil)
}
}
此外,如果我沒有辦法「命名」照片,那麼是否有任何類型的標識符與我可以保存的照片/資產綁定,以便稍後可以通過該標識符請求該照片? –