【发布时间】:2015-07-03 10:50:49
【问题描述】:
我正在使用Xcode 6.3 swift(我认为是 1.2 版)。我的应用程序从网络上的自定义服务器下载照片。然后我希望它将具有给定文件名的照片保存到通过照片框架创建的自定义相册中。我需要能够控制照片/文件名,因为我会跟踪我在数据库中下载了哪些照片,然后需要按名称查看它们。
我创建了一个自定义 PhotoAlbum 类,我试图将与相册交互的所有逻辑包装在其中。下载照片后,我可以调用以下代码,它可以创建相册并保存照片,但正如您将在 savePhoto() 方法中注意到的那样,我不知道保存时在哪里/如何使用 photoName 变量来命名照片。最后,我还需要知道如何在loadPhoto() 方法中按名称检索照片。
感谢您能给我的任何帮助/建议。
let myAlbum = PhotoAlbum("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)
}
}
【问题讨论】:
-
此外,如果我无法为照片“命名”,那么我可以保存与该照片/资产相关的任何类型的标识符,以便我以后可以通过该标识符请求该照片?
标签: ios swift xcode frameworks photo