zoukankan      html  css  js  c++  java
  • [翻译] DBCamera 轻量级定制摄像头

    DBCamera 轻量级定制摄像头

    https://github.com/danielebogo/DBCamera

    DBCamera is a simple custom camera with AVFoundation.

    DBCamera使用了AVFoundation框架并简单的定制了摄像头.

    Getting Started

    Installation

    The recommended approach for installating DBCamera is via the CocoaPods package manager, as it provides flexible dependency management and dead simple installation. For best results, it is recommended that you install via CocoaPods >= 0.16.0 using Git >= 1.8.0 installed via Homebrew.

    推荐你使用CocoaPods安装.

    Integration

    DBCamera has a simple integration:

    DBCamera模块化很简单:

    #import "DBCameraViewController.h"
    #import "DBCameraContainer.h"
    
    //Add DBCameraViewControllerDelegate protocol
    @interface RootViewController () <DBCameraViewControllerDelegate>
    
    //Present DBCameraViewController with different behaviours
    
    - (void) openCamera
    {
        DBCameraContainerViewController *cameraContainer = [[DBCameraContainerViewController alloc] initWithDelegate:self];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:cameraContainer];
        [nav setNavigationBarHidden:YES];
        [self presentViewController:nav animated:YES completion:nil];
    }
    
    - (void) openCameraWithoutSegue
    {
        DBCameraContainerViewController *container = [[DBCameraContainerViewController alloc] initWithDelegate:self];
        DBCameraViewController *cameraController = [DBCameraViewController initWithDelegate:self];
        [cameraController setUseCameraSegue:NO];
        [container setCameraViewController:cameraController];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:container];
        [nav setNavigationBarHidden:YES];
        [self presentViewController:nav animated:YES completion:nil];
    }
    
    - (void) openCameraWithoutContainer
    {
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[DBCameraViewController initWithDelegate:self]];
        [nav setNavigationBarHidden:YES];
        [self presentViewController:nav animated:YES completion:nil];
    }
    
    //Use your captured image
    #pragma mark - DBCameraViewControllerDelegate
    
    - (void) captureImageDidFinish:(UIImage *)image withMetadata:(NSDictionary *)metadata
    {
        [_imageView setImage:image];
        [self.presentedViewController dismissViewControllerAnimated:YES completion:nil];
    }
    

    By default, DBCameraViewController has another controller to display the image preview. When you create DBCameraViewController instance, you can set useCameraSegue: NO, to avoid it.

    默认情况下,DBCameraViewController有一个其他的controller来展示图片列表,当你创建这个DBCameraViewController实例时,你可以手动设置关闭它.

    - (void) openCameraWithoutSegue
    {
        DBCameraContainerViewController *container = [[DBCameraContainerViewController alloc] initWithDelegate:self];
        DBCameraViewController *cameraController = [DBCameraViewController initWithDelegate:self];
        [cameraController setUseCameraSegue:NO];
        [container setCameraViewController:cameraController];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:container];
        [nav setNavigationBarHidden:YES];
        [self presentViewController:nav animated:YES completion:nil];
    }
    

    Customizing the camera

    Basic

    For simple customizations, you can customize the built-in camera view by sending a cameraSettingsBlock to the view controller.

    对于简单的定制,你可以给这个controller传递一个cameraSettingsBlock来实现内置照相机view的定制.

    #import "DBCameraView.h"
    - (void)openCameraWithSettings:(CDVInvokedUrlCommand*)command
    {
        DBCameraContainerViewController *cameraContainer = [[DBCameraContainerViewController alloc]
            initWithDelegate:self
            cameraSettingsBlock:^(DBCameraView *cameraView) {
                [cameraView.gridButton setHidden:YES];
            }];
    
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:cameraContainer];
        [nav setNavigationBarHidden:YES];
        [self presentViewController:nav animated:YES completion:nil];
    }
    

    Advanced

    You can also create a custom interface, using a subclass of DBCameraView

    当然,你也可以自己创建一个界面,通过继承DBCameraView子类的方式来实现.

    #import "DBCameraView.h"
    
    @interface CustomCamera : DBCameraView
    - (void) buildInterface;
    @end
    
    #import "CustomCamera.h"
    
    @interface CustomCamera ()
    @property (nonatomic, strong) UIButton *closeButton;
    @property (nonatomic, strong) CALayer *focusBox, *exposeBox;
    @end
    
    @implementation CustomCamera
    
    - (void) buildInterface
    {
        [self addSubview:self.closeButton];
    
        [self.previewLayer addSublayer:self.focusBox];
        [self.previewLayer addSublayer:self.exposeBox];
    
        [self createGesture];
    }
    
    - (UIButton *) closeButton
    {
        if ( !_closeButton ) {
            _closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
            [_closeButton setBackgroundColor:[UIColor redColor]];
            [_closeButton setImage:[UIImage imageNamed:@"close"] forState:UIControlStateNormal];
            [_closeButton setFrame:(CGRect){ CGRectGetMidX(self.bounds) - 15, 17.5f, 30, 30 }];
            [_closeButton addTarget:self action:@selector(close) forControlEvents:UIControlEventTouchUpInside];
        }
    
        return _closeButton;
    }
    
    - (void) close
    {
        if ( [self.delegate respondsToSelector:@selector(closeCamera)] )
            [self.delegate closeCamera];
    }
    
    #pragma mark - Focus / Expose Box
    
    - (CALayer *) focusBox
    {
        if ( !_focusBox ) {
            _focusBox = [[CALayer alloc] init];
            [_focusBox setCornerRadius:45.0f];
            [_focusBox setBounds:CGRectMake(0.0f, 0.0f, 90, 90)];
            [_focusBox setBorderWidth:5.f];
            [_focusBox setBorderColor:[[UIColor whiteColor] CGColor]];
            [_focusBox setOpacity:0];
        }
    
        return _focusBox;
    }
    
    - (CALayer *) exposeBox
    {
        if ( !_exposeBox ) {
            _exposeBox = [[CALayer alloc] init];
            [_exposeBox setCornerRadius:55.0f];
            [_exposeBox setBounds:CGRectMake(0.0f, 0.0f, 110, 110)];
            [_exposeBox setBorderWidth:5.f];
            [_exposeBox setBorderColor:[[UIColor redColor] CGColor]];
            [_exposeBox setOpacity:0];
        }
    
        return _exposeBox;
    }
    
    - (void) drawFocusBoxAtPointOfInterest:(CGPoint)point andRemove:(BOOL)remove
    {
        [super draw:_focusBox atPointOfInterest:point andRemove:remove];
    }
    
    - (void) drawExposeBoxAtPointOfInterest:(CGPoint)point andRemove:(BOOL)remove
    {
        [super draw:_exposeBox atPointOfInterest:point andRemove:remove];
    }
    
    @end
    
    //Present DBCameraViewController with a custom view.
    @interface RootViewController () <DBCameraViewControllerDelegate>
    
    - (void) openCustomCamera
    {
        CustomCamera *camera = [CustomCamera initWithFrame:[[UIScreen mainScreen] bounds]];
        [camera buildInterface];
    
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[DBCameraViewController alloc] initWithDelegate:self cameraView:camera]];
        [nav setNavigationBarHidden:YES];
        [self presentViewController:nav animated:YES completion:nil];
    }
    

  • 相关阅读:
    Python文件操作
    两个标签页定位第二个标签页元素时显示element not visible
    Selenium Webdriver元素定位的八种常用方式
    Python集合set
    Python 字典
    数据库存储过程
    打印1-100
    》》》 《类的多态》
    》》》《类的继承》
    》》》关于eclipse中git同步代码报错checkout conflict with files的解决方法
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3746910.html
Copyright © 2011-2022 走看看