相册框架之AssetsLibrary

看到项目中用到AssetsLibrary这个框架, 所以研究了一下

其实很简单

- (void)getAlbumPhoto {
    NSString *tipTextWhenNoPhotosAuthorization; // 提示语
    // 获取当前应用对照片的访问授权状态
    ALAuthorizationStatus authorizationStatus = [ALAssetsLibrary authorizationStatus];
    NSLog(@"sss%ld", (long)authorizationStatus);
    /*
     // 不确定身份
     ALAuthorizationStatusNotDetermined NS_ENUM_DEPRECATED_IOS(6_0, 9_0) = 0,
     // 受限制授权
     ALAuthorizationStatusRestricted NS_ENUM_DEPRECATED_IOS(6_0, 9_0),
     // 拒绝
     ALAuthorizationStatusDenied NS_ENUM_DEPRECATED_IOS(6_0, 9_0),
     // 授权成功
     ALAuthorizationStatusAuthorized NS_ENUM_DEPRECATED_IOS(6_0, 9_0)
     */
    // 如果没有获取访问授权,或者访问授权状态已经被明确禁止,则显示提示语,引导用户开启授权
    if (authorizationStatus == ALAuthorizationStatusRestricted || authorizationStatus == ALAuthorizationStatusDenied) {
        NSDictionary *mainInfoDictionary = [[NSBundle mainBundle] infoDictionary];
        NSString *appName = [mainInfoDictionary objectForKey:@"CFBundleName"];
        tipTextWhenNoPhotosAuthorization = [NSString stringWithFormat:@"请在设备的"设置-隐私-照片"选项中,允许 %@ 访问你的手机相册", appName];
        // 展示提示语
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:tipTextWhenNoPhotosAuthorization delegate:nil cancelButtonTitle:@"取消" otherButtonTitles: nil];
        [alertView show];
        return;
    }
    
    [self.assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        if (group) {
            // 过滤相册列表
            /*
             // + (ALAssetsFilter *)allPhotos; // 全部的相册
             // + (ALAssetsFilter *)allVideos; // 全部的视频
             // + (ALAssetsFilter *)allAssets; // 所有视频 + 相册
             */
            [group setAssetsFilter:[ALAssetsFilter allPhotos]];
            if (group.numberOfAssets > 0) {
                // 把相册储存到数组中,方便后面展示相册时使用
                AssetPhotoAlbum *assetGroupAlbum = [AssetPhotoAlbum assetPhotoAlbumWithAssetsGroup:group];
                [self.allAssetGroupAlbum addObject:assetGroupAlbum];
                
                [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
                    if (result) {
                        AlbumPhoto *albumPhoto = [AlbumPhoto albumPhotoAsset:result];
                        [assetGroupAlbum.assetAlbumPhotosArray addObject:albumPhoto];
                    }
                }];
            }
        }
        else {
            if (self.allAssetGroupAlbum.count) {
                [self.collectionView reloadData];
            }
        }
    } failureBlock:^(NSError *error) {
        NSLog(@"Asset group not found!
");
    }];
}
原文地址:https://www.cnblogs.com/MrTao/p/5252443.html