Last active
April 23, 2021 11:55
-
-
Save himanshu-benzatine/7f2c66d96216e38f06437a8a0f41687d to your computer and use it in GitHub Desktop.
Create album in device
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Photos | |
class CustomPhotoAlbum: NSObject { | |
static let albumName = "StrickerApp" // here put your album name | |
static let sharedInstance = CustomPhotoAlbum() | |
var assetCollection: PHAssetCollection! | |
override init() { | |
super.init() | |
if let assetCollection = fetchAssetCollectionForAlbum() { | |
self.assetCollection = assetCollection | |
return | |
} | |
if PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.authorized { | |
PHPhotoLibrary.requestAuthorization({ (status: PHAuthorizationStatus) -> Void in | |
() | |
}) | |
} | |
if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.authorized { | |
self.createAlbum() | |
} else { | |
PHPhotoLibrary.requestAuthorization(requestAuthorizationHandler) | |
} | |
} | |
func requestAuthorizationHandler(status: PHAuthorizationStatus) { | |
if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.authorized { | |
// ideally this ensures the creation of the photo album even if authorization wasn't prompted till after init was done | |
print("trying again to create the album") | |
self.createAlbum() | |
} else { | |
print("should really prompt the user to let them know it's failed") | |
} | |
} | |
func createAlbum() { | |
PHPhotoLibrary.shared().performChanges({ | |
PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: CustomPhotoAlbum.albumName) // create an asset collection with the album name | |
}) { success, error in | |
if success { | |
self.assetCollection = self.fetchAssetCollectionForAlbum() | |
} else { | |
print("error \(error)") | |
} | |
} | |
} | |
func fetchAssetCollectionForAlbum() -> PHAssetCollection? { | |
let fetchOptions = PHFetchOptions() | |
fetchOptions.predicate = NSPredicate(format: "title = %@", CustomPhotoAlbum.albumName) | |
let collection = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions) | |
if let _: AnyObject = collection.firstObject { | |
return collection.firstObject | |
} | |
return nil | |
} | |
func save(image: UIImageView) { | |
if assetCollection == nil { | |
return // if there was an error upstream, skip the save | |
} | |
PHPhotoLibrary.shared().performChanges({ | |
UIGraphicsBeginImageContextWithOptions(image.bounds.size, false, 0) | |
let context: CGContext? = UIGraphicsGetCurrentContext() | |
image.layer.render(in: context!) | |
let imgs: UIImage? = UIGraphicsGetImageFromCurrentImageContext() | |
UIGraphicsEndImageContext() | |
let assetChangeRequest = PHAssetChangeRequest.creationRequestForAsset(from: imgs!) | |
let assetPlaceHolder = assetChangeRequest.placeholderForCreatedAsset | |
let albumChangeRequest = PHAssetCollectionChangeRequest(for: self.assetCollection) | |
let enumeration: NSArray = [assetPlaceHolder!] | |
albumChangeRequest!.addAssets(enumeration) | |
}, completionHandler: nil) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment