zoukankan      html  css  js  c++  java
  • 整理UIImagePickerController、保存图片到相册问题

    //此方法在ios8.0系统上,之前用代码创建的相册,手动删除它,再用这个库去创建刚被删除的相册,这个时候方法回调是不会跑fail模块的,它走的是正常流程,但是带回来的group却是nil造成崩溃原因
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    [assetsLibrary addAssetsGroupAlbumWithName:@"iOSDevTip1" resultBlock:^(ALAssetsGroup *group12) {
        [groups addObject:group12];
    } failureBlock:nil];
    //为了解决iOS8.0以上系统下无法通过代码创建被删除过的同名相册
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^
     {
         [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"琳小兮"];
         
     } completionHandler:^(BOOL success, NSError *error)
     {
         if (!success) {
             NSLog(@"---error:%@",error.userInfo);
         }
     }];

    补充

    #pragma mark ----- 摄像头和相册相关 -----
    
    // 判断设备是否有摄像头
    - (BOOL)isCameraAvailable {
        return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
    }
    
    // 判断前面的摄像头是否可用
    - (BOOL)isFrontCameraAvailable {
        return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];
    }
    
    // 判断后面的摄像头是否可用
    - (BOOL)isRearCameraAvailable {
        return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];
    }
    
    // 判断是否支持某种多媒体类型:拍照片、拍视频
    - (BOOL)cameraSupportsMedia:(NSString *)paramMediaType sourceType:(UIImagePickerControllerSourceType)paramSourceType {
        __block BOOL result = NO;
        if ([paramMediaType length] == 0){
            NSLog(@"Media type is empty.");
            return NO;
        }
        NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:paramSourceType];
        [availableMediaTypes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL*stop) {
            NSString *mediaType = (NSString *)obj;
            if ([mediaType isEqualToString:paramMediaType]){
                result = YES;
                *stop = YES;
            }
            
        }];
        return result;
    }
    
    // 判断摄像头是否支持录像
    - (BOOL)doesCameraSupportShootingVideos {
        return [self cameraSupportsMedia:(NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypeCamera];
    }
    
    // 判断摄像头是否支持拍照
    - (BOOL)doesCameraSupportTakingPhotos {
        return [self cameraSupportsMedia:(NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypeCamera];
    }
    
    
    #pragma mark ----- 相册文件选取相关 -----
    
    // 判断相册是否可用
    - (BOOL) isPhotoLibraryAvailable{
        return [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypePhotoLibrary];
    }
    
    // 判断是否可以在相册中选择视频
    - (BOOL) canUserPickVideosFromPhotoLibrary {
        return [self cameraSupportsMedia:( NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    }
    
    // 判断是否可以在相册中选择照片
    - (BOOL) canUserPickPhotosFromPhotoLibrary {
        return [self cameraSupportsMedia:( NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    }

     ------------------------------------- 2017.01.10补充 ----------------------------------

    enum PHAssetCollectionType : Int {
        case Album //从 iTunes 同步来的相册,以及用户在 Photos 中自己建立的相册
        case SmartAlbum //经由相机得来的相册
        case Moment //Photos 为我们自动生成的时间分组的相册
    }
    
    enum PHAssetCollectionSubtype : Int {
        case AlbumRegular //用户在 Photos 中创建的相册,也就是我所谓的逻辑相册
        case AlbumSyncedEvent //使用 iTunes 从 Photos 照片库或者 iPhoto 照片库同步过来的事件。然而,在iTunes 12 以及iOS 9.0 beta4上,选用该类型没法获取同步的事件相册,而必须使用AlbumSyncedAlbum。
        case AlbumSyncedFaces //使用 iTunes 从 Photos 照片库或者 iPhoto 照片库同步的人物相册。
        case AlbumSyncedAlbum //做了 AlbumSyncedEvent 应该做的事
        case AlbumImported //从相机或是外部存储导入的相册,完全没有这方面的使用经验,没法验证。
        case AlbumMyPhotoStream //用户的 iCloud 照片流
        case AlbumCloudShared //用户使用 iCloud 共享的相册
        case SmartAlbumGeneric //文档解释为非特殊类型的相册,主要包括从 iPhoto 同步过来的相册。由于本人的 iPhoto 已被 Photos 替代,无法验证。不过,在我的 iPad mini 上是无法获取的,而下面类型的相册,尽管没有包含照片或视频,但能够获取到。
        case SmartAlbumPanoramas //相机拍摄的全景照片
        case SmartAlbumVideos //相机拍摄的视频
        case SmartAlbumFavorites //收藏文件夹
        case SmartAlbumTimelapses //延时视频文件夹,同时也会出现在视频文件夹中
        case SmartAlbumAllHidden //包含隐藏照片或视频的文件夹
        case SmartAlbumRecentlyAdded //相机近期拍摄的照片或视频
        case SmartAlbumBursts //连拍模式拍摄的照片,在 iPad mini 上按住快门不放就可以了,但是照片依然没有存放在这个文件夹下,而是在相机相册里。
        case SmartAlbumSlomoVideos //Slomo 是 slow motion 的缩写,高速摄影慢动作解析,在该模式下,iOS 设备以120帧拍摄。不过我的 iPad mini 不支持,没法验证。
        case SmartAlbumUserLibrary //这个命名最神奇了,就是相机相册,所有相机拍摄的照片或视频都会出现在该相册中,而且使用其他应用保存的照片也会出现在这里。
        case Any //包含所有类型
    }
  • 相关阅读:
    性能瓶颈调优(转载)
    jmeter用Firefox录制https协议证书问题解决(转载)
    Jmeter之性能测试类型
    Jmeter调度器配置(转载)
    性能测试监控:Jmeter +InfluxDB +collectd +Grafana(十六)(转载)
    Jmeter之性能压测Stepping Thread Group 逐步增加并发数 阶梯式加压并发 (十五)(转载)
    Jmeter之性能测试插件PerfMon Metrics Collector监听器,实时监听服务器资源(十四)(转载)
    Jmeter用Jmeter自带录制工具代理录制手机端应用脚本APP脚本(0十三)(转载)
    python在windows下连接mysql数据库
    码农在线工具资源
  • 原文地址:https://www.cnblogs.com/xs514521/p/6257426.html
Copyright © 2011-2022 走看看