AVCaptureDevice //初始化捕捉设备
AVCaptureDeviceInput //创建输入流 input
AVCaptureSession //创建会话
AVCaptureVideoPreviewLayer //预览图层
AVCaptureMetadataOutput //输出 二维码
AVCaptureVideoDataOutput //输出 视频流(随着屏幕刷新返回一个图片很快相当于视频)
session 关联设备、输入、输出、预览
效果图
直接上项目地址吧:现在csdn积分无法控制,直接把代码复制,可以直接复制走或者github下载即可
csdn:https://download.csdn.net/download/wangxiaoertedaye/11069772
gitHub:https://github.com/zxgiOS/erweima
代码:图片只能上下载代码库里有,或让美工制作
//
// ScanCodeViewController.m
// Productproject
//
// Created by apple on 17/10/26.
// Copyright © 2017年. All rights reserved.
//
#import "ScanCodeViewController.h"
#define kDeviceVersion [[UIDevice currentDevice].systemVersion floatValue]
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
#define kNavbarHeight ((kDeviceVersion>=7.0)? 64 :44 )
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define kSCREEN_MAX_LENGTH (MAX(kScreenWidth, kScreenHeight))
#define kSCREEN_MIN_LENGTH (MIN(kScreenWidth, kScreenHeight))
#define IS_IPHONE4 (IS_IPHONE && kSCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE5 (IS_IPHONE && kSCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE6 (IS_IPHONE && kSCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE6P (IS_IPHONE && kSCREEN_MAX_LENGTH == 736.0)
@import AVFoundation;
@interface ScanCodeViewController ()<AVCaptureMetadataOutputObjectsDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>{
UILabel * introLab;
BOOL isLightOn;
UIButton *mineQRCode;
UIButton *theLightBtn;
BOOL hasTheVC;
BOOL isFirst;
BOOL upOrdown;
int num;
AVCaptureVideoPreviewLayer *preView;
AVCaptureDevice *captureDevice;
NSTimer * timer;
}
@property (nonatomic,strong) AVCaptureSession *session;
@property (nonatomic,weak) AVCaptureMetadataOutput *output;
@property (nonatomic,retain) UIImageView *lineIV;
@end
@implementation ScanCodeViewController
-(void)initUI{
isFirst=YES;
upOrdown = NO;
num =0;
}
- (void)startSessionRightNow:(NSNotification*)notification {
[self creatTimer];
[_session startRunning];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if(isFirst)
{
[self creatTimer];
[_session startRunning];
}
isFirst=NO;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self deleteTimer];
[[NSNotificationCenter defaultCenter]removeObserver:self name:@"startSession" object:nil];
}
- (void)viewDidDisappear