photos

1.查询相册使用权限
PHAuthorizationStatus st = [PHPhotoLibrary authorizationStatus];
if (PHAuthorizationStatusDenied == st || PHAuthorizationStatusRestricted == st) {
NSLog(@"相册不允许访问");
}
if (PHAuthorizationStatusAuthorized == st || PHAuthorizationStatusNotDetermined == st) {
NSLog(@"相册允许访问or用户未选择");
}

//相册变更
[[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:self];
//回调方法如下,不过这个地方是有一个坑的,就是这个回调是在一个子线程里面,如果你想要对UI进行操作的话,则必须回调主线程
//相册变化回调

  • (void)photoLibraryDidChange:(PHChange *)changeInstance {
    dispatch_sync(dispatch_get_main_queue(), ^{
    // your codes
    });
    }

2.创建自己的相册

[[PHPhotoLibrary sharedPhotoLibrary]performChanges:^{
[PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"相册名字"];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
}];

3.获取自己创建的相册

PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil];
PHAssetCollection *collection = nil;
for (PHAssetCollection *accc in userAlbums) {
if ([accc.localizedTitle isEqualToString:@"相册名字"]) {
collection = accc;
}
}

4.保存图片到自己相册 —-删除指定相片类似

  • (void)addCustomAsset:(UIImage *)image
    collection:(PHAssetCollection *)collection
    completionHandler:(void (^)(void))successBlock
    failture:(void (^)(NSString * _Nonnull))failtureBlock
    {
    //执行变化请求
    [self.photoLibaray performChanges:^{
    //如果相册允许操作
    if([collection canPerformEditOperation:PHCollectionEditOperationAddContent]){
    //创建资源请求对象
    PHAssetChangeRequest * assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
    //创建相册请求对象
    PHAssetCollectionChangeRequest * groupChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection];
    //向相册中添加资源。要删除相片,换个方法即可
    [groupChangeRequest addAssets:@[assetChangeRequest.placeholderForCreatedAsset]];
    }
    }completionHandler:^(BOOL success, NSError * _Nullable error) {
    if (success == YES)//成功 {
    successBlock();return;
    }
    //失败
    failtureBlock(error.localizedDescription);
    }];
    }

5.保存视频到自己相册

  • (void)addCustomAsset2:(NSURL *)url
    collection:(PHAssetCollection *)collection
    completionHandler:(void (^)(void))successBlock
    failture:(void (^)(NSString * _Nonnull))failtureBlock {
    //执行变化请求
    [self.photoLibaray performChanges:^{
    //如果相册允许操作
    if([collection canPerformEditOperation:PHCollectionEditOperationAddContent]){
    //创建资源请求对象
    PHAssetChangeRequest * assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
    //创建相册请求对象
    PHAssetCollectionChangeRequest * groupChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection];
    //向相册中添加资源
    [groupChangeRequest addAssets:@[assetChangeRequest.placeholderForCreatedAsset]];
    }
    }completionHandler:^(BOOL success, NSError * _Nullable error) {
    if (success == true)//成功 {
    successBlock();return;
    }
    //失败
    failtureBlock(error.localizedDescription);
    }];
    }

6.保存图片/视频到相机胶卷

UISaveVideoAtPathToSavedPhotosAlbum(self.videoPath, self, @selector(video:didFinishSavingWithError:contextInfo:), NULL);

UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);

//图片保存回调

  • (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
    NSLog(@"保存成功与否提示");
    }

//录像保存完毕

  • (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo: (void *)contextInfo {
    NSLog(@"保存成功与否提示");
    }

7.获取自己相册的图片

PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
//按创建日期排序,最新在前面
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
//筛选图片,只要图片。只要视频mediaType=2
fetchOptions.predicate = [NSPredicate predicateWithFormat:@"mediaType=1"];
//collection 可以从前面方法获取到
PHFetchResult *albumsPic = [PHAsset fetchAssetsInAssetCollection:collection options:fetchOptions];
//获取第二张图
PHAsset *asset = albumsPic[1];
PHCachingImageManager *imageManager = [[PHCachingImageManager alloc] init];
//可以设置options,获取到图片的质量
// PHImageRequestOptions *options = [PHImageRequestOptions new];
// options.version = PHImageRequestOptionsVersionCurrent;
// options.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat;
// options.resizeMode = PHImageRequestOptionsResizeModeFast;
[imageManager requestImageForAsset:asset
targetSize:AssetGridThumbnailSize
contentMode:PHImageContentModeDefault
options:nil//options
resultHandler:^(UIImage *result, NSDictionary *info) {
self.imageView.image = result;
}];

8.获取胶卷所以图片/视频/音频

PHFetchOptions *options = [[PHFetchOptions alloc] init];
/// 按创建日期排序
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
//获取胶卷所有图片。要获取视频,把类型改为PHAssetMediaTypeVideo,音频的为PHAssetMediaTypeAudio
PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:options];

//枚举里面的内容
[result enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
PHAsset *asset = (PHAsset *)obj;
}];

9.只能相册获取

//获取所有智能相册
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
[smartAlbums enumerateObjectsUsingBlock:^(PHAssetCollection * _Nonnull collection, NSUInteger idx, BOOL *stop) {
NSLog(@"相册名字:%@", collection.localizedTitle);
}];

//智能相册的title不出意外都是英文,下面提供一个对应的中文名

  • (NSString *)transformAblumTitle:(NSString *)title
    {
    if ([title isEqualToString:@"Slo-mo"]) {
    return @"慢动作";
    } else if ([title isEqualToString:@"Recently Added"]) {
    return @"最近添加";
    } else if ([title isEqualToString:@"Favorites"]) {
    return @"最爱";
    } else if ([title isEqualToString:@"Recently Deleted"]) {
    return @"最近删除";
    } else if ([title isEqualToString:@"Videos"]) {
    return @"视频";
    } else if ([title isEqualToString:@"All Photos"]) {
    return @"所有照片";
    } else if ([title isEqualToString:@"Selfies"]) {
    return @"自拍";
    } else if ([title isEqualToString:@"Screenshots"]) {
    return @"屏幕快照";
    } else if ([title isEqualToString:@"Camera Roll"]) {
    return @"相机胶卷";
    }
    return nil;
    }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容