2016년 1월 3일 일요일

Saving image to custom album (사진첩 추가하여 사진저장 하기) @@ in Swift2.x - Xcode 7.3 iOS 9.3

*사진첩을 추가하여 추가된 사진첩에 사진파일을 저장하는 예제입니다.

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 이라는 사진첩이 생성된것을 확인 할 수 있습니다.





참고하여 만든 예제라서 예제중에 사용된 메소드에 관한 설명이 많이 부족합니다. 
자세한 설명이 필요하신 분들은 구글링을 통해서 검색하셔서 좋은 정보 얻으시길 바랍니다.



댓글 없음:

댓글 쓰기

추천 게시물

애플 개발자 등록방법 2016년 5월 8일 기준!!

애플 개발자 등록 절차 1. 개발자 등록 페이지 이동    애플 개발자 로그인 > Account 페이지 이동 > 하단 영역 클릭 (이미지 참조)   >> Enroll 클릭 >> 무조건 승인!! ...