CNImagePickerManager.m 9.38 KB
//
//  CNImagePickerManager.m
//  CNLiveNetAdd
//
//  Created by 梁星国 on 2018/10/8.
//  Copyright © 2018年 cnlive. All rights reserved.
//

#import "CNImagePickerManager.h"
#import <AssetsLibrary/AssetsLibrary.h>
#import <SDAutoLayout/SDAutoLayout.h>
#import <CNLiveUploadManager/CNLiveUploadManager.h>

@implementation CNImagePickerManager

/// 打开相册选择图片
+ (void)ImagePickerWithMaxImagesCount:(NSInteger)maxImagesCount columnNumber:(NSInteger)columnNumber delegate:(id<TZImagePickerControllerDelegate>)delegate pushPhotoPickerVc:(BOOL)pushPhotoPickerVc isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto selectedAssets:(NSMutableArray *)selectedAssets enterType:(CNImagePickerEnterType )enterType pickingPhotosHandle:(didFinishPickingPhotosHandle) pickingPhotosHandle{
    
    if (![delegate isKindOfClass:[UIViewController class]]) {
        return;
    }
    UIViewController *vc = (UIViewController *)delegate;

    CNImagePickerController *imagePickerVc = [[CNImagePickerController alloc] initWithMaxImagesCount:maxImagesCount columnNumber:columnNumber delegate:delegate pushPhotoPickerVc:pushPhotoPickerVc];
    [imagePickerVc configTZImagePicker];//基本配置
    //特殊配置
    switch (enterType) {
           
        case CNImagePickerEnterTypeFriendsCircle:
            imagePickerVc.maxEditVideoTime = kFriendsCircle_limit_video_maxEdit_upload;//编辑长度
            imagePickerVc.maxVideoDuration = kFriendsCircle_limit_video_max_upload;//编辑视频最大长度
            // 3. 设置是否可以混选选择视频/图片/原图
            imagePickerVc.allowPickingMultipleVideo = NO;
            break;
        case CNImagePickerEnterTypeComment:
#pragma mark - TODO:根据不同设置
            break;
        case CNImagePickerEnterTypeSweepCode:

            break;
        case CNImagePickerEnterTypeChat:

            break;
        case CNImagePickerEnterTypeWitness:
            imagePickerVc.allowPickingImage = NO;// 显示图片
             imagePickerVc.allowPickingMultipleVideo = NO;
            imagePickerVc.maxEditVideoTime = kFriendsCircle_limit_video_maxEdit_upload;//编辑长度
            imagePickerVc.maxVideoDuration = kFriendsCircle_limit_video_max_upload;//编辑视频最大长度
            break;
        case CNImagePickedEnterTypeField:
            imagePickerVc.allowPickingImage = YES;// 显示图片
            imagePickerVc.allowPickingMultipleVideo = NO;
            imagePickerVc.allowPickingVideo = NO;
            imagePickerVc.allowPickingGif = NO;
            break;
        default://其他
            break;
    }
    imagePickerVc.modalPresentationStyle = UIModalPresentationFullScreen;
    imagePickerVc.isSelectOriginalPhoto = isSelectOriginalPhoto;//是否选择原图
    // 1.设置目前已经选中的图片数组
    imagePickerVc.selectedAssets = selectedAssets; // 目前已经选中的图片数组
    /// 5. Single selection mode, valid when maxImagesCount = 1
    /// 5. 单选模式,maxImagesCount为1时才生效
    // 设置竖屏下的裁剪尺寸

    NSInteger left = 30;
    NSInteger widthHeight = vc.view.width - 2 * left;
    NSInteger top = (vc.view.height - widthHeight) / 2;
    imagePickerVc.cropRect = CGRectMake(left, top, widthHeight, widthHeight);
    // 你可以通过block或者代理,来得到用户选择的照片.
    [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
        // 回调参数
        !pickingPhotosHandle ? : pickingPhotosHandle(photos, assets, isSelectOriginalPhoto);
        
    }];
    
    [imagePickerVc setDidFinishPickingPhotosWithInfosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto, NSArray<NSDictionary *> *infos) {
        
        NSLog(@"输出infos = %@",infos);
    }];
    
    [imagePickerVc setDidNewFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray<TZAssetModel *> *models, NSArray *assets, BOOL isSelectOriginalPhoto) {
        NSLog(@"输出models = %@",models);
    }];
    
    [vc presentViewController:imagePickerVc animated:YES completion:nil];
}

///  预览图片
+ (void)ImagePickerWithMaxImagesCount:(NSInteger)maxImagesCount delegate:(id<TZImagePickerControllerDelegate>)delegate selectedAssets:(NSMutableArray *)selectedAssets selectedPhotos:(NSMutableArray *)selectedPhotos index:(NSInteger)index isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto enterType:(CNImagePickerEnterType )enterType pickingPhotosHandle:(didFinishPickingPhotosHandle) pickingPhotosHandle {
    
    if (![delegate isKindOfClass:[UIViewController class]]) {
        return;
    }
    UIViewController *vc = (UIViewController *)delegate;
    
    CNImagePickerController *imagePickerVc = [[CNImagePickerController alloc] initWithSelectedAssets:selectedAssets selectedPhotos:selectedPhotos index:index];
    [imagePickerVc configTZImagePicker];//基本配置
    imagePickerVc.modalPresentationStyle = UIModalPresentationFullScreen;
    //特殊配置
    switch (enterType) {
        case CNImagePickerEnterTypeFriendsCircle:
            imagePickerVc.allowPickingGif = NO;
            imagePickerVc.allowPickingOriginalPhoto = YES;
            imagePickerVc.allowPickingMultipleVideo = NO;
            break;
        case CNImagePickerEnterTypeComment:
#pragma mark - TODO:根据不同设置
            break;
        case CNImagePickerEnterTypeSweepCode:
            
            break;
        case CNImagePickerEnterTypeChat:
            
            break;
            case CNImagePickerEnterTypeOther:
            break;
        default://其他
            break;
    }
    
    imagePickerVc.maxImagesCount = maxImagesCount;
    imagePickerVc.isSelectOriginalPhoto = isSelectOriginalPhoto;

    [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
        // 回调参数
        !pickingPhotosHandle ? : pickingPhotosHandle(photos, assets, isSelectOriginalPhoto);
        
    }];
    
   
    
    [vc presentViewController:imagePickerVc animated:YES completion:nil];
    
}

///  预览单个视频
+ (void)ImagePickerWithSelectedAsset:(id)selectedAsset delegate:(id<TZImagePickerControllerDelegate>)delegate {
    
    if (![delegate isKindOfClass:[UIViewController class]]) {
        return;
    }
    UIViewController *vc = (UIViewController *)delegate;
    
    TZVideoPlayerController *videoVC = [[TZVideoPlayerController alloc] init];
    TZAssetModel *model = [TZAssetModel modelWithAsset:selectedAsset type:TZAssetModelMediaTypeVideo timeLength:@""];
    videoVC.isOther = YES;//(LXG)相册外进入
    videoVC.model = model;
    videoVC.modalPresentationStyle = UIModalPresentationFullScreen;
    [vc presentViewController:videoVC animated:YES completion:nil];
    
}

/// 返回类型
+ (TZAssetModelMediaType)getAssetType:(id)asset {
    
    TZAssetModelMediaType type = TZAssetModelMediaTypePhoto;
    if ([asset isKindOfClass:[PHAsset class]]) {
        PHAsset *phAsset = (PHAsset *)asset;
        if (phAsset.mediaType == PHAssetMediaTypeVideo)      type = TZAssetModelMediaTypeVideo;
        else if (phAsset.mediaType == PHAssetMediaTypeAudio) type = TZAssetModelMediaTypeAudio;
        else if (phAsset.mediaType == PHAssetMediaTypeImage) {
            if (iOS9_1Later) {
                if (@available(iOS 9.1, *)) {
                    if (phAsset.mediaSubtypes == PHAssetMediaSubtypePhotoLive)
                    {
                        type = TZAssetModelMediaTypeLivePhoto;
                    }
                } else {
                    // Fallback on earlier versions
                }
            }
            // Gif
            if ([[phAsset valueForKey:@"filename"] hasSuffix:@"GIF"]) {
                type = TZAssetModelMediaTypePhotoGif;
            }
        }
    } else {
        if ([[asset valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) {
            type = TZAssetModelMediaTypeVideo;
        }
    }
    return type;
}


+(void)ImageManagerSavePhotoWithDelegate:(id<TZImagePickerControllerDelegate>)delegate image:(UIImage *)image location:(CLLocation *)location success:(void (^)(TZAssetModel *assetModel))success failure:(void (^)(NSError *error))failure  {
    
    TZImagePickerController *tzImagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:1 delegate:delegate];
    tzImagePickerVc.sortAscendingByModificationDate = YES;
    
    [tzImagePickerVc showProgressHUD];
    // save photo and get asset / 保存图片,获取到asset
    [[TZImageManager manager] savePhotoWithImage:image location:location completion:^(NSError *error){
        
        if (error) {
            [tzImagePickerVc hideProgressHUD];
            failure(error);
            NSLog(@"图片保存失败 %@",error);
        } else {
            
            [[TZImageManager manager] getCameraRollAlbum:NO allowPickingImage:YES needFetchAssets:YES completion:^(TZAlbumModel *model) {
                [[TZImageManager manager] getAssetsFromFetchResult:model.result allowPickingVideo:NO allowPickingImage:YES completion:^(NSArray<TZAssetModel *> *models) {
                    [tzImagePickerVc hideProgressHUD];
                    TZAssetModel *assetModel = [models firstObject];
                    if (tzImagePickerVc.sortAscendingByModificationDate) {
                        assetModel = [models lastObject];
                    }
                    success(assetModel);
                }];
                
            }];
        }
    }];
    
}


@end