*사진첩을 추가하여 추가된 사진첩에 사진파일을 저장하는 예제입니다.
1. 새로운 .swift 파일 생성
< 파일명 : PhotoAlbumCustom.swift >
2. PhotoAlbumCustom.swift 파일에 아래 코드 입력
import Photos
import AssetsLibrary
enum PhotoAlbumUtilResult {
case SUCCESS, ERROR, DENIED
}
class PhotoAlbumUtil: NSObject {
// 사진첩 생성 작업 및 이미지 저장 작업
class func saveImageInAlbum(image: UIImage, albumName: String, completion: ((result:PhotoAlbumUtilResult) -> ())?) {
// 사진첩 폴더 생성
var eventAlbum: PHAssetCollection?
// 사진첩 이름
let albumName = "CustomAlbum"
let albums = PHAssetCollection.fetchAssetCollectionsWithType(PHAssetCollectionType.Album, subtype: PHAssetCollectionSubtype.Any, options: nil)
albums.enumerateObjectsUsingBlock { (album, index, stop) in
if album.localizedTitle == albumName {
eventAlbum = album as? PHAssetCollection
stop.memory = true
}
}
//폴더 생성 유무 확인 후 각각 상태값에 따라 함수 호출
//앨범 첫 생성 시 eventAlbum == nil
if let album = eventAlbum {
completion?(result: .DENIED)
}else{
//eventAlbum == nil 일 경우 폴더 재생성
PHPhotoLibrary.sharedPhotoLibrary().performChanges({ PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(albumName)
}, completionHandler: { (succeeded, error) -> Void in
if succeeded {
//succeeded 시 사진접 생성 함수 재호출
self.saveImageInAlbum(image, albumName: albumName, completion: completion)
} else {
// 에러
completion?(result: .ERROR)
}
})
}
// 사진첩 앨범 생성 확인 됐을 시 이미지 저장 작업 진행
if let albumdex = eventAlbum {
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let result = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
let assetPlaceholder = result.placeholderForCreatedAsset
let albumChangeRequset =
PHAssetCollectionChangeRequest(forAssetCollection: albumdex)
let enumeration: NSArray = [assetPlaceholder!]
albumChangeRequset!.addAssets(enumeration)
}, completionHandler: { (succeeded, error) -> Void in
if succeeded {
completion?(result: .SUCCESS)
} else{
print(error!.localizedDescription)
completion?(result: .ERROR)
}
})
}
}
}
3. ViewController.swift 에 호출 하는 함수 입력
import UIKit
class ViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
// 함수 호출
imageSave()
}
func imageSave(){
// 테스트용 이미지 객체 생성
let image = UIImage(named: "test.png")
PhotoAlbumUtil.saveImageInAlbum(image, albumName: "TestAlbum", completion: { (result) in
switch result {
case .SUCCESS:
dispatch_async(dispatch_get_main_queue(), {
self.callback()
})
break
case .ERROR:
dispatch_async(dispatch_get_main_queue(), {
self.errorCallback()
})
break
case .DENIED:
break
default:
break
}
})
}
// Alert 뷰로 이미지 저장 성공 / 에러 표시해주는 콜백 함수
func callback(){
let ac = UIAlertController(title: "Save", message: "", preferredStyle: .Alert)
ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
presentViewController(ac, animated: true, completion: nil)
}
func errorCallback(){
let ac = UIAlertController(title: "Save error", message: "", preferredStyle: .Alert)
ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
presentViewController(ac, animated: true, completion: nil)
}
}
* 아래 이미지는 결과물입니다. TestAlbum 이라는 사진첩이 생성된것을 확인 할 수 있습니다.
참고하여 만든 예제라서 예제중에 사용된 메소드에 관한 설명이 많이 부족합니다.
자세한 설명이 필요하신 분들은 구글링을 통해서 검색하셔서 좋은 정보 얻으시길 바랍니다.