-
问题
不是所有的拍照UIImagePickerController都能搞定,理由如下:
1.产品不整点幺蛾子,哪来体验创新
2.设计不整点幺蛾子,怎能体现用心
3.运营:这体验跟某宝某信咋不一样???
4.开发:我是被逼成大佬的!!!1.2.3.层层施压,大厂能搞得,你咋搞不了
-
思路:
定制相机,绕不开的问题:UIImagePickerController中那块实时场景怎么搞?
方案上一般是采用AVCaptureSession + AVCaptureVideoPreviewLayer
AVCaptureVideoPreviewLayer继承CALayer, 设置bounds、frame, 可满足简单需求
But, 横竖屏切换、iPhone与iPad共用、视图效果调整【毕竟上面的1.2.话语权普遍大过开发】等此类情况下,frame的方式哪有约束来的实在
每个view都有一个layer属性,定制view的layer为AVCaptureVideoPreviewLayer, view约束调整改变frame即可
-
上菜
-
定义一个view
@interface AVPreView : UIView @end
-
设置layerClass
+ (Class)layerClass { return [AVCaptureVideoPreviewLayer class]; }
-
为了实时场景,layer即AVCaptureVideoPreviewLayer 是需要设置一个session的
// 设置属性 @property (nonatomic, strong) AVCaptureSession *session; // Getter & Setter - (AVCaptureSession *)session { return [(AVCaptureVideoPreviewLayer *)self.layer session]; } - (void)setSession:(AVCaptureSession *)session { [(AVCaptureVideoPreviewLayer *)self.layer setSession:session]; }
-
需要设置聚焦之类的,此时需要对view上触碰的点转换成摄像头的位置
-(CGPoint)captureDevicePointForPoint:(CGPoint)point{ AVCaptureVideoPreviewLayer *layer = (AVCaptureVideoPreviewLayer *)self.layer; //将屏幕上点击的位置转化成摄像头的位置 return [layer captureDevicePointOfInterestForPoint:point]; }
-
-
Game Over. Code不行,多敲敲。
iOS写在定制相机之前
原创
©著作权归作者所有:来自51CTO博客作者善斋书屋的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
android线上环境怎么模拟f12
从零搭建Android开发环境Windows版准备工作安装jdk安装Android SDK安装AndroidStudio安装GenyMotion配置AndroidStudioAndroid Studio配置Genymotion 插件开始第一个app 准备工作java jdk 1.8(官网下载),Android SDK(官网下载),Android Studio (官网下载),Genymotion(
android线上环境怎么模拟f12 java android android studio Android