乐趣区

关于ios:iOS写在定制相机之前

  • 问题

    不是所有的拍照 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 不行,多敲敲。
退出移动版