• UIImagePickerController本地图片视频,相机录像机使用


    1.添加framework:MobileCoreServices

    2.头:#import <MobileCoreServices/MobileCoreServices.h>

    大致代码:

    UIImagePickerController *imagePicker=[[UIImagePickerController alloc]init];;//实例并初始化;
        imagePicker.delegate=self;//图像选择器委托设置为
        //选取本地movie

            imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
            imagePicker.mediaTypes =  [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
            [self presentViewController:imagePicker animated:YES completion:nil];

        
        //选取本地图片
            imagePicker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
            imagePicker.mediaTypes=[[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil];
             [[UIApplication sharedApplication] setStatusBarHidden:YES];//隐藏状态栏;
            [self presentViewController:imagePicker animated:YES completion:nil];


        //相机
            if ([UIImagePickerController isSourceTypeAvailable:   UIImagePickerControllerSourceTypeCamera]){         

                 imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;
                 imagePicker.mediaTypes=[[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil];
                 // [[UIApplication sharedApplication] setStatusBarHidden:YES];//隐藏状态栏;
                 [self presentViewController:imagePicker animated:YES completion:nil];
            }else{
                NSLog(@"照相机不可用");
            }
           
       //录像机
            if ([UIImagePickerController isSourceTypeAvailable:   UIImagePickerControllerSourceTypeCamera]){                

                imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;
                imagePicker.mediaTypes=[[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
                 [[UIApplication sharedApplication] setStatusBarHidden:YES];//隐藏状态栏;
                [self presentViewController:imagePicker animated:YES completion:nil];
            }else{
                NSLog(@"照相机不可用");
            }
       3.回调

    #pragma mark - UIImagePickerController代理方法
    //完成
    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
        NSString *mediaType=[info objectForKey:UIImagePickerControllerMediaType];
        if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {//如果是拍照
            UIImage *image;
            //如果允许编辑则获得编辑后的照片,否则获取原始照片
            if (self.imagePicker.allowsEditing) {
                image=[info objectForKey:UIImagePickerControllerEditedImage];//获取编辑后的照片
            }else{
                image=[info objectForKey:UIImagePickerControllerOriginalImage];//获取原始照片
            }
            [self.photo setImage:image];//显示照片
            UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);//保存到相簿
        }else if([mediaType isEqualToString:(NSString *)kUTTypeMovie]){//如果是录制视频
            NSLog(@"video...");
            NSURL *url=[info objectForKey:UIImagePickerControllerMediaURL];//视频路径
            NSString *urlStr=[url path];
            if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr)) {
                //保存视频到相簿,注意也可以使用ALAssetsLibrary来保存
                UISaveVideoAtPathToSavedPhotosAlbum(urlStr, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);//保存视频到相簿
            }
            
        }
    
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
        NSLog(@"取消");
    }
    
    #pragma mark - 私有方法
    -(UIImagePickerController *)imagePicker{
        if (!_imagePicker) {
            _imagePicker=[[UIImagePickerController alloc]init];
            _imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;//设置image picker的来源,这里设置为摄像头
            _imagePicker.cameraDevice=UIImagePickerControllerCameraDeviceRear;//设置使用哪个摄像头,这里设置为后置摄像头
            if (self.isVideo) {
                _imagePicker.mediaTypes=@[(NSString *)kUTTypeMovie];
                _imagePicker.videoQuality=UIImagePickerControllerQualityTypeIFrame1280x720;
                _imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModeVideo;//设置摄像头模式(拍照,录制视频)
                
            }else{
                _imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModePhoto;
            }
            _imagePicker.allowsEditing=YES;//允许编辑
            _imagePicker.delegate=self;//设置代理,检测操作
        }
        return _imagePicker;
    }
    
    //视频保存后的回调
    - (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
        if (error) {
            NSLog(@"保存视频过程中发生错误,错误信息:%@",error.localizedDescription);
        }else{
            NSLog(@"视频保存成功.");
            //录制完之后自动播放
            NSURL *url=[NSURL fileURLWithPath:videoPath];
            _player=[AVPlayer playerWithURL:url];
            AVPlayerLayer *playerLayer=[AVPlayerLayer playerLayerWithPlayer:_player];
            playerLayer.frame=self.photo.frame;
            [self.photo.layer addSublayer:playerLayer];
            [_player play];
            
        }
    }


    初探佳境,多多学习交流
  • 相关阅读:
    Sql Server中的游标最好只用于有主键或唯一键的表
    SQLServer中DataLength()和Len()两内置函数的区别(转载)
    Sql server bulk insert
    ASP.NET CORE中使用Cookie身份认证
    用.net中的SqlBulkCopy类批量复制数据 (转载)
    使用C#的AssemblyResolve事件和TypeResolve事件动态解析加载失败的程序集
    Entity framework 中Where、First、Count等查询函数使用时要注意
    注意SSIS中的DT_NUMERIC类型转换为字符类型(比如DT_WSTR)时,会截断小数点前的0
    记一次完整的android源码截屏事件的捕获<标记砖>
    ffmpeg添加水印的方法举例 (砖)
  • 原文地址:https://www.cnblogs.com/sunjianfei/p/5508750.html
Copyright © 2020-2023  润新知