06-UIImagePickerController 照片单选

只支持单选
1.获取本地相册图片、视频
//设置代理
< UIImagePickerControllerDelegate , UINavigationControllerDelegate

------------------------------------------------- 获取本地相册图片-----------------------------------------------

// 读取本地相册图片
- ( IBAction )btn:( UIButton *)sender {
   
   
// 创建图片选择控制器
   
UIImagePickerController *imageP = [[ UIImagePickerController alloc ] init ];
   
// 设置代理
    imageP.
delegate = self ;
   
// 设置类型
    imageP.
sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum ;
   
// 模态跳转
    [
self presentViewController :imageP animated : YES completion : nil ];
   
}

------------------------------------------------- 获取本地相册视频-----------------------------------------------

// 读取本地相册视频
- (
IBAction )movie:( UIButton *)sender {
   
UIImagePickerController *movieP = [[ UIImagePickerController alloc ] init ];
    movieP.
delegate = self ;
    movieP.
sourceType = UIImagePickerControllerSourceTypePhotoLibrary ;
    movieP.
mediaTypes = @[ @"public.movie" ] ;
    [
self presentViewController :movieP animated : YES completion : nil ];
}

------------------------------------------------------ 摄像头拍照----------------------------------------------------

// 使用摄像头拍视频
- (
IBAction )takeMovieAction:( id )sender {
   
   
// 判断有木有摄像头
   
BOOL isCamera = [ UIImagePickerController isCameraDeviceAvailable : UIImagePickerControllerCameraDeviceRear ];
   
if (!isCamera) {
       
UIAlertView *alertView = [[ UIAlertView alloc ] initWithTitle : @" 提示 " message : @" 当前设备没有摄像头可以使用 " delegate : nil cancelButtonTitle : @" 确定 " otherButtonTitles : nil , nil ];
        [alertView
show ];
       
       
return ;
    }
   
   
UIImagePickerController *pickerCtrl = [[ UIImagePickerController alloc ] init ];
    pickerCtrl.
sourceType = UIImagePickerControllerSourceTypeCamera ;
    pickerCtrl.
mediaTypes = @[ @"public.movie" ] ;
   
    [
self presentViewController :pickerCtrl animated : YES completion : nil ];
   
   
}

------------------------------------------------ 重写点击相册图片资源调用的代理方法-------------------------------------

// 重写点击相册图片资源调用的代理方法
- (
void )imagePickerController:( UIImagePickerController *)picker didFinishPickingMediaWithInfo:( NSDictionary *)info
{
   // 取得媒体类型
   
NSString *type = info[ UIImagePickerControllerMediaType   ];
   
   
// 分别判断拿到指定类型后做什么操作
   
if ([type isEqualToString : @"public.image" ]){
       
//info 是所点击的那张图片的信息,是个字典
       
NSLog ( @"%@" , info);
       
// key 取得这张图片
       
UIImage *img =  [info objectForKey : UIImagePickerControllerOriginalImage ];
       
// 赋值给图片空间
        _image . image = img;

        // 如果用户调用摄像头,保存相片到本地
        if (picker. sourceType == UIImagePickerControllerSourceTypeCamera )
       {
            // 将拍摄的照片保存到本地
           
UIImageWriteToSavedPhotosAlbum (img, self , @selector (image:didFinishSavingWithError:contextInfo:), nil );
        }

    }
   
   
else if ([type isEqualToString : @"public.movie" ])
    {
       
// 拿到视频 URL 就可以做一些操作了
       
NSURL *movieUrl = info[ UIImagePickerControllerReferenceURL ];
       
NSLog ( @"%@" , movieUrl);
    }
   
// 并且跳转回来
    [
self dismissViewControllerAnimated : YES completion : nil ];
}


#pragma mark - 相片保存完成后调用的代理方法
- ( void )image:( UIImage *)image didFinishSavingWithError:( NSError *)error contextInfo:( void *)contextInfo {

   
NSLog ( @" 相片保存完成 " );
   
}


二、AssetsLibrary
      系统的UIImagePickerController只能让用户选择单图片,而一般情况下,我们需要上传多张图片,这时应该可以同时选择多张图片,否则用户体验会很差。因此多图片选择器就诞生了。
      在类库中,苹果为我们提供了一个AssetsLibrary.Framework的库,可以通过它获取设备里的图片和视频。在使用这个类库时,我们需要导入,且<AssetsLibrary/AssetsLibrary.h>。然后我们可以使用它来获取不同组的枚举。



// 取得手机相册图片
- (
void )loadData {

   
/*
     1.
相册库               ALAssetsLibrary
     2.
相册文件夹           ALAssetsGroup
     3.
相册中的图片、视频     ALAsset
     */

   
   
//1. 创建相册库
   
libarary = [[ ALAssetsLibrary alloc ] init ];
   
   
// 将相册库的文件取得
    [
libarary enumerateGroupsWithTypes : ALAssetsGroupSavedPhotos usingBlock :^( ALAssetsGroup *group, BOOL *stop) {
       
       
// 这个 block 会调用多次(有几个文件夹就调用几次)
       
if (group != nil ) {
           
           
// 取得相册中的图片
            [group
enumerateAssetsUsingBlock :^( ALAsset *result, NSUInteger index, BOOL *stop) {
               
               
//result  图片、视频
               
               
if (result != nil ) {
                   
                   
// 获取原图
                   
ALAssetRepresentation *presentation = [result defaultRepresentation ];
                   
CGImageRef imgRef = [presentation fullResolutionImage ];
                   
UIImage *img = [ UIImage imageWithCGImage :imgRef];
                    [
_imageArray addObject :img];
                   
                   
// 获取缩略图
                   
CGImageRef thumbnailRef = [result thumbnail ];
                   
UIImage *thumbnailImg = [ UIImage imageWithCGImage :thumbnailRef];
                    [
_thumbnailArray addObject :thumbnailImg];
               
                }
            }];
        }
       
       
// 刷新视图
        [
_collectionView reloadData ];
       
    }
failureBlock :^( NSError *error) {
       
       
NSLog ( @"error:%@" ,error);
    }];
   
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值