PHPhotoLibrary类

照片库使用单例发来请求授权 或者 查询授权状态

单例
+ (PHPhotoLibrary *)sharedPhotoLibrary;
获取授权状态
+ (PHAuthorizationStatus)authorizationStatus;
请求授权
+ (void)requestAuthorization:(void(^)(PHAuthorizationStatus status))handler;

同时注册照片库改变的观察者,接受到改变后执行照片库的观察者代理协议

#pragma mark - Change Handling

- (void)registerChangeObserver:(id<PHPhotoLibraryChangeObserver>)observer;
- (void)unregisterChangeObserver:(id<PHPhotoLibraryChangeObserver>)observer;
@protocol PHPhotoLibraryChangeObserver <NSObject>

- (void)photoLibraryDidChange:(PHChange *)changeInstance;

@end

保存图片方式

// 保存到相册
- (void)savePhotoToAlbum:(UIImage*)image
         completionBlock:(nullable void (^)(WBPKPhoto *photo,NSError *error))completionBlock {
    @autoreleasepool {
        __block PHObjectPlaceholder *assetPlaceholder = nil;
        dispatch_semaphore_wait(self.savePhotoToAlbumSemaphore, DISPATCH_TIME_FOREVER);
        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
            PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
            assetPlaceholder = changeRequest.placeholderForCreatedAsset;
        } completionHandler:^(BOOL success, NSError * _Nullable error) {
            PHFetchResult *result = nil;
            if (success && assetPlaceholder) {
                result = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetPlaceholder.localIdentifier] options:nil];
                WBPKPhoto *photo = [[WBPKPhoto alloc] initWithPHAsset:result.firstObject];
                if (completionBlock) completionBlock(photo,error);
            } else {
                if (completionBlock) completionBlock(nil,error);
            }
            dispatch_semaphore_signal(self.savePhotoToAlbumSemaphore);
        }];
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,403评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,417评论 25 709
  • 一、Why 文章前面为什么要大段大段的阐述“定义”的重要呢? 如果我们对任何一个事物或者某个知识点没有清晰准确的概...
    采薇1阅读 3,885评论 2 0
  • 文/熟女分割线 说不出一生守候如果没有一句爱我的借口别停在原地等候直到视线默默消失在时间尽头 爱我,不是一片艳阳一...
    eileen_Y阅读 3,173评论 0 1
  • 那愁旱又愁雨的耕种,丰年歉岁难交织出彩虹。祖祖辈辈、起早贪黑,双脚渐老。 日出日落,挥洒汗水,直起腰、片刻休息时,...
    岁月声响阅读 1,605评论 0 3