该效果类似于QQ双击屏幕实现打开摄像头,将摄像头拍摄到的背景作为聊天背景的效果,这里我定义了一个UIView,用到时候只需要将该视图作为主视图饥渴
首先导入两个系统的框架
#import <AVFoundation/AVFoundation.h>
#import <AssetsLibrary/AssetsLibrary.h>
在.h文件中实现相机属性和方法的定义
typedef void(^PropertyChangeBlock)(AVCaptureDevice *captureDevice);
@interface RSCamreaVideoView : UIView<AVCaptureVideoDataOutputSampleBufferDelegate,AVCaptureFileOutputRecordingDelegate>
@property (strong,nonatomic) AVCaptureSession *captureSession;//负责输入和输出设备之间的数据传递
@property (strong,nonatomic) AVCaptureDeviceInput *captureDeviceInput;//负责从AVCaptureDevice获得输入数据
@property (strong,nonatomic) AVCaptureStillImageOutput *captureStillImageOutput;//照片输出流
@property (strong,nonatomic) AVCaptureMovieFileOutput *captureMovieFileOutput;//视频输出流
@property (strong,nonatomic) AVCaptureVideoPreviewLayer *captureVideoPreviewLayer;//相机拍摄预览图层
-(instancetype)initWithFrame:(CGRect)frame;
- (void)initPreviewLayer;
//视频录制
- (void)takeVideo ;
//打开设备
- (void)openDevice;
//拍摄照片
- (void)takePhoto;
//关闭设备
- (void)closeDevice;
//关闭录制
- (void)finishTakeVidio;
@end
然后再.m文件中实现各种方法
@implementation RSCamreaVideoView
-(instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self initPreviewLayer];
}
return self;
}
- (void)initPreviewLayer {
//初始化会话
_captureSession=[[AVCaptureSession