最下方有效果,可以去看看效果。源码https://github.com/a122273328/Camera.git。
这里因为网上对iOS 自定义相册详细讲解太多了。由于时间关系,这里不再赘述
接下来 直接 上代码。手懒得同学可直接复制代码。
重点内容
(1) 新建工程 在viewDidload中创建按钮进入相机。如果你的需求跟我差不太多,在不对需求改动的情况下,你只需要引入下图的文件之后
就可以完成对自定义相机的实现了。
可以看下项目的基本结构
当然你还要在info.plist中添加权限
1.Privacy - Camera Usage Description
2.Privacy - Photo Library Usage Description
这里我把你新建的工程中ViewController需要写的代码贴出来。**
//
// ViewController.m
// Camera
//
// Created by wzh on 2017/6/2.
// Copyright © 2017年 wzh. All rights reserved.
//
#import "ViewController.h"
#import "CameraViewController.h"
@interface ViewController ()<CameraDelegate>
@property(nonatomic, strong) CameraViewController *cameraViewvController;
@property (nonatomic, strong) UIImageView *imgeView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(100, 100, 100, 100);
btn.backgroundColor = [UIColor redColor];
[btn addTarget:self action:@selector(cameraAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
}
- (void)cameraAction
{
self.cameraViewvController = [[CameraViewController alloc] init];
self.cameraViewvController.delegate = self;
//self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
[self presentViewController:self.cameraViewvController animated:YES completion:nil];
}
//选取照片的回调
- (void)CameraTakePhoto:(UIImage *)image
{
NSLog(@"-----%@",image);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
重点内容
**2.到此为止就是在引入上图那个文件之后你需要做的事情
当然下面让我们来看一下CameraViewController这个控制器里面都需要做什么**
//控制器.h文件
//
// CameraView.h
// Camera
//
// Created by wzh on 2017/6/2.
// Copyright © 2017年 wzh. All rights reserved.
//
#import <UIKit/UIKit.h>
@protocol CameraDelegate <NSObject>
- (void)CameraTakePhoto:(UIImage *)image;
@end
@interface CameraViewController : UIViewController
@property (nonatomic, weak)id<CameraDelegate> delegate;
@end
重点内容
只需要按照步骤对应的创建ViewController.就可以。下面是CameraViewController的.m文件
//控制器.m文件,这里我直接把文件全部copy过来
//
// CameraView.m
// Camera
//
// Created by wzh on 2017/6/2.
// Copyright © 2017年 wzh. All rights reserved.
//
#import "CameraViewController.h"
#import <AVFoundation/AVFoundation.h>
#import <AssetsLibrary/AssetsLibrary.h>
#import "ClipViewController.h"
#define KWIDTH [UIScreen mainScreen].bounds.size.width
#define KHEIGHT [UIScreen mainScreen].bounds.size.height
@interface CameraViewController ()<UIGestureRecognizerDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate,ClipPhotoDelegate>
/**
* AVCaptureSession对象来执行输入设备和输出设备之间的数据传递
*/
@property (nonatomic, strong) AVCaptureSession* session;
/**
* 输入设备
*/
@property (nonatomic, strong) AVCaptureDeviceInput* videoInput;
/**
* 照片输出流
*/
@property (nonatomic, strong) AVCaptureStillImageOutput* stillImageOutput;
/**
* 预览图层
*/
@property (nonatomic, strong) AVCaptureVideoPreviewLayer* previewLayer;
/**
* 记录开始的缩放比例
*/
@property(nonatomic,assign)CGFloat beginGestureScale;
/**
* 最后的缩放比例
*/
@property(nonatomic,assign)CGFloat effectiveScale;
@property (nonatomic, strong) AVCaptureConnection *stillImageConnection;
@property (nonatomic, strong) NSData *jpegData;
@property (nonatomic, assign) CFDictionaryRef attachments;
@property (nonatomic, strong) UIView *toolView;
@property (nonatomic, strong) UIView *editorView;
@property (nonatomic, strong) UIImagePickerController *imgPicker;
@end
@implementation CameraViewController
- (void)viewDidLoad {
[super viewDidLoad];
// [self CreatedCamera];
// [self selectImageFrromCamera];
[self initAVCaptureSession];
[self se