swift 4 :自定义相册并保存到该相册

版权声明:转载请标注原文地址。邮箱[email protected] https://blog.csdn.net/Xoxo_x/article/details/80682359
//
//  SaveImageTools.swift
//  PHPhotoDemo
//
//  Created by Quinn_F on 2018/6/13.
//  Copyright © 2018年 Quinn. All rights reserved.
//

import UIKit
import Photos

class SaveImageTools: NSObject {

    private var assetCollection:PHAssetCollection!
    private var albumFound:Bool = false
    private var photoAsset:PHFetchResult<AnyObject>!
    private var collection: PHAssetCollection!
    private var assetCollectionPlaceholder:PHObjectPlaceholder!
    private var albumName = "相机"
    private var image:UIImage!

    static let shared = SaveImageTools()
    private override init() {}

    func creatAlbum(completed: ((_ error:Error?)->())?) {
        let fetchOptions = PHFetchOptions()
        fetchOptions.predicate = NSPredicate.init(format: "title = %@", albumName)
        let collection : PHFetchResult<PHAssetCollection> = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
        if let _ = collection.firstObject{
            self.albumFound = true
            assetCollection = collection.firstObject
            self.saveImage(completed: completed)
        }else{
            PHPhotoLibrary.shared().performChanges({
                let creatAlbumRequest:PHAssetCollectionChangeRequest = PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: self.albumName)
                self.assetCollectionPlaceholder = creatAlbumRequest.placeholderForCreatedAssetCollection
            }) { (result, error) in
                if result{
                    self.albumFound = result
                    let collectionFetchResult = PHAssetCollection.fetchAssetCollections(withLocalIdentifiers: [self.assetCollectionPlaceholder.localIdentifier], options: nil)
                    self.assetCollection = collectionFetchResult.firstObject
                    self.saveImage(completed: completed)
                }else{
                    completed?(error)
                }
            }
        }
    }
    private func saveImage(completed: ((_ error:Error?)->())?) {
        PHPhotoLibrary.shared().performChanges({
            let assetRequest = PHAssetChangeRequest.creationRequestForAsset(from: self.image)
            let assetPlaceholder = assetRequest.placeholderForCreatedAsset
            let albumChangeRequest = PHAssetCollectionChangeRequest.init(for: self.assetCollection)
            albumChangeRequest?.addAssets([assetPlaceholder!] as NSArray)

        }) { (result, error) in
            completed?(error)
        }
    }
    func saveImage(_ image:UIImage,completed: ((_ error:Error?)->())?) {
        self.image = image
        creatAlbum(completed: completed)
    }
   func getImageCollectionFromTitle(_ name:String)->PHAssetCollection?{
        let result = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumRegular, options: nil)
        var array:[PHAssetCollection] = []

        result.enumerateObjects { (collection, index, _) in

            array.append(collection)
        }
        for item in array{
            if item.localizedTitle == self.albumName{
                return item
            }
        }
        return nil
    }
    func enumerateAssets(assetCollection: PHAssetCollection?)->[UIImage] {
        var containerArr:[UIImage] = []

        let options = PHImageRequestOptions()

        options.isSynchronous = true

        var assets: PHFetchResult<PHAsset>? = nil
        if let aCollection = assetCollection {
            assets = PHAsset.fetchAssets(in: aCollection, options: nil)
        }
        assets?.enumerateObjects({ (asset, index, _) in
            PHImageManager.default().requestImage(for: asset, targetSize: CGSize.init(width: CGFloat(asset.pixelWidth), height: CGFloat(asset.pixelWidth)), contentMode: .default, options: nil, resultHandler: { (img, info) in
                if let img = img {
                    containerArr.append(img)
                }
            })
        })
        return containerArr
    }
}

猜你喜欢

转载自blog.csdn.net/Xoxo_x/article/details/80682359