iOS开发笔记--自定义Zbar扫描界面(自己加了一条动态的扫描线)
2015-04-17 09:41
399 查看
作者:朱克锋
邮箱:zhukefeng@iboxpay.com
转载请注明出处:http://blog.csdn.net/linux_zkf
这个简单的实例实在ZBarReaderViewController的view层上再加一层用于定义自己的界面
//http://blog.csdn.net/miracle_of_thinking/article/details/7576532(这个是另一个ZBar二维码扫描的链接,我用的时候各种报错,最后查了那么还是没解决,根据大家需要吧,里面还是很详细的。)
//我自添加的代码,更详细一些吧(攻参考)
//这里是要导入的头文件
#import "ViewController.h"
#import "ZBarSDK.h"
#import "ZBarReaderViewController.h"
#import <***Foundation/***Foundation.h>
//这里是要遵守的一些协议
@interface ViewController ()<ZBarReaderDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate,***CaptureMetadataOutputObjectsDelegate>
//这里是里面用的一些属性
@property (strong , nonatomic) ZBarReaderViewController* reader;
@property (strong , nonatomic) NSString* qRUrl;
@property (strong , nonatomic) UIImageView* qRImageView;
@property (weak, nonatomic) IBOutlet UILabel *myLabel;//这个mylable是我从storyboard里面拖出来的属性,是为了把扫描到的数据展示出来。
@property (strong, nonatomic) UIView *boxView;
@property (strong, nonatomic) CALayer *scanLayer;
//捕捉会话
@property (nonatomic, strong) ***CaptureSession *captureSession;
//展示layer
@property (nonatomic, strong) ***CaptureVideoPreviewLayer *videoPreviewLayer;
@end
@implementation ViewController
//这个拖出来的方法就是点击跳转到扫描二维码页面的按钮
- (IBAction)btnDown:(UIButton *)sender {
[self QRscan];
}
//从这里开始就是转载的,里面我还加了一点(有说明)
- (void)QRscan
{
ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
//非全屏
reader.wantsFullScreenLayout = NO;
//隐藏底部控制按钮
reader.showsZBarControls = NO;
//设置自己定义的界面
[self setOverlayPickerView:reader];
ZBarImageScanner *scanner = reader.scanner;
[scanner setSymbology: ZBAR_I25
config: ZBAR_CFG_ENABLE
to: 0];
[self presentModalViewController: reader
animated: YES];
[reader release];
}
- (void)setOverlayPickerView:(ZBarReaderViewController *)reader
{
//清除原有控件
for (UIView *temp in [reader.view subviews]) {
for (UIButton *button in [temp subviews]) {
if ([button isKindOfClass:[UIButton class]]) {
[button removeFromSuperview];
}
}
for (UIToolbar *toolbar in [temp subviews]) {
if ([toolbar isKindOfClass:[UIToolbar class]]) {
[toolbar setHidden:YES];
[toolbar removeFromSuperview];
}
}
}
//画中间的基准线
// UIView* line = [[UIView alloc] initWithFrame:CGRectMake(40, 220, 240, 1)];
//
// line.backgroundColor = [UIColor redColor];
//
// [reader.view addSubview:line];
//10.1.扫描框
// _boxView = [[UIView alloc] initWithFrame:CGRectMake(self.view.bounds.size.width * 0.2f, self.view.bounds.size.height * 0.2f, self.view.bounds.size.width - self.view.bounds.size.width * 0.4f, self.view.bounds.size.height - self.view.bounds.size.height
* 0.4f)];
// _boxView.layer.borderColor = [UIColor greenColor].CGColor;
// _boxView.layer.borderWidth = 1.0f;
//
// [self.view addSubview:_boxView];
//下面的扫描线是我自己加的东西,我把原来的基准线那些给注释了,你也可以用原来的
//10.2.扫描线
_scanLayer = [[CALayer alloc] init];
_scanLayer.frame = CGRectMake(20, 220, self.qRImageView.bounds.size.width-40, 1);
_scanLayer.backgroundColor = [UIColor brownColor].CGColor;
[reader.view.layer addSublayer:_scanLayer];
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.08f target:self selector:@selector(moveScanLayer:) userInfo:nil repeats:YES];
[timer fire];
//10.开始扫描
[_captureSession startRunning];
//最上部view
UIView* upView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];
upView.alpha = 0.3;
upView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:upView];
//用于说明的label
UILabel * labIntroudction= [[UILabel alloc] init];
labIntroudction.backgroundColor = [UIColor clearColor];
labIntroudction.frame=CGRectMake(15, 20, 290, 50);
labIntroudction.numberOfLines=2;
labIntroudction.textColor=[UIColor whiteColor];
labIntroudction.text=@"将二维码图像置于矩形方框内,离手机摄像头10CM左右,系统会自动识别。";
[upView addSubview:labIntroudction];
[labIntroudction release];
[upView release];
//左侧的view
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 80, 20, 280)];
leftView.alpha = 0.3;
leftView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:leftView];
[leftView release];
//右侧的view
UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(300, 80, 20, 280)];
rightView.alpha = 0.3;
rightView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:rightView];
[rightView release];
//底部view
UIView * downView = [[UIView alloc] initWithFrame:CGRectMake(0, 360, 320, 120)];
downView.alpha = 0.3;
downView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:downView];
[downView release];
//用于取消操作的button
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
cancelButton.alpha = 0.4;
[cancelButton setFrame:CGRectMake(20, 390, 280, 40)];
[cancelButton setTitle:@"取消" forState:UIControlStateNormal];
[cancelButton.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];
[cancelButton addTarget:self action:@selector(dismissOverlayView:)forControlEvents:UIControlEventTouchUpInside];
[reader.view addSubview:cancelButton];
}
//取消button方法
- (void)dismissOverlayView:(id)sender{
[self dismissModalViewControllerAnimated: YES];
}
//这是我加的方法(线条的动画)
-(void)stopReading{
[_captureSession stopRunning];
_captureSession = nil;
[_scanLayer removeFromSuperlayer];
[_videoPreviewLayer removeFromSuperlayer];
}
- (void)moveScanLayer:(NSTimer *)timer
{
CGRect frame = _scanLayer.frame;
if (self.qRImageView.frame.size.height-40 < _scanLayer.frame.origin.y) {
frame.origin.y = 50;
_scanLayer.frame = frame;
}else{
frame.origin.y += 5;
[UIView animateWithDuration:0.1 animations:^{
_scanLayer.frame = frame;
}];
}
}
邮箱:zhukefeng@iboxpay.com
转载请注明出处:http://blog.csdn.net/linux_zkf
这个简单的实例实在ZBarReaderViewController的view层上再加一层用于定义自己的界面
//http://blog.csdn.net/miracle_of_thinking/article/details/7576532(这个是另一个ZBar二维码扫描的链接,我用的时候各种报错,最后查了那么还是没解决,根据大家需要吧,里面还是很详细的。)
//我自添加的代码,更详细一些吧(攻参考)
//这里是要导入的头文件
#import "ViewController.h"
#import "ZBarSDK.h"
#import "ZBarReaderViewController.h"
#import <***Foundation/***Foundation.h>
//这里是要遵守的一些协议
@interface ViewController ()<ZBarReaderDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate,***CaptureMetadataOutputObjectsDelegate>
//这里是里面用的一些属性
@property (strong , nonatomic) ZBarReaderViewController* reader;
@property (strong , nonatomic) NSString* qRUrl;
@property (strong , nonatomic) UIImageView* qRImageView;
@property (weak, nonatomic) IBOutlet UILabel *myLabel;//这个mylable是我从storyboard里面拖出来的属性,是为了把扫描到的数据展示出来。
@property (strong, nonatomic) UIView *boxView;
@property (strong, nonatomic) CALayer *scanLayer;
//捕捉会话
@property (nonatomic, strong) ***CaptureSession *captureSession;
//展示layer
@property (nonatomic, strong) ***CaptureVideoPreviewLayer *videoPreviewLayer;
@end
@implementation ViewController
//这个拖出来的方法就是点击跳转到扫描二维码页面的按钮
- (IBAction)btnDown:(UIButton *)sender {
[self QRscan];
}
//从这里开始就是转载的,里面我还加了一点(有说明)
- (void)QRscan
{
ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
//非全屏
reader.wantsFullScreenLayout = NO;
//隐藏底部控制按钮
reader.showsZBarControls = NO;
//设置自己定义的界面
[self setOverlayPickerView:reader];
ZBarImageScanner *scanner = reader.scanner;
[scanner setSymbology: ZBAR_I25
config: ZBAR_CFG_ENABLE
to: 0];
[self presentModalViewController: reader
animated: YES];
[reader release];
}
- (void)setOverlayPickerView:(ZBarReaderViewController *)reader
{
//清除原有控件
for (UIView *temp in [reader.view subviews]) {
for (UIButton *button in [temp subviews]) {
if ([button isKindOfClass:[UIButton class]]) {
[button removeFromSuperview];
}
}
for (UIToolbar *toolbar in [temp subviews]) {
if ([toolbar isKindOfClass:[UIToolbar class]]) {
[toolbar setHidden:YES];
[toolbar removeFromSuperview];
}
}
}
//画中间的基准线
// UIView* line = [[UIView alloc] initWithFrame:CGRectMake(40, 220, 240, 1)];
//
// line.backgroundColor = [UIColor redColor];
//
// [reader.view addSubview:line];
//10.1.扫描框
// _boxView = [[UIView alloc] initWithFrame:CGRectMake(self.view.bounds.size.width * 0.2f, self.view.bounds.size.height * 0.2f, self.view.bounds.size.width - self.view.bounds.size.width * 0.4f, self.view.bounds.size.height - self.view.bounds.size.height
* 0.4f)];
// _boxView.layer.borderColor = [UIColor greenColor].CGColor;
// _boxView.layer.borderWidth = 1.0f;
//
// [self.view addSubview:_boxView];
//下面的扫描线是我自己加的东西,我把原来的基准线那些给注释了,你也可以用原来的
//10.2.扫描线
_scanLayer = [[CALayer alloc] init];
_scanLayer.frame = CGRectMake(20, 220, self.qRImageView.bounds.size.width-40, 1);
_scanLayer.backgroundColor = [UIColor brownColor].CGColor;
[reader.view.layer addSublayer:_scanLayer];
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.08f target:self selector:@selector(moveScanLayer:) userInfo:nil repeats:YES];
[timer fire];
//10.开始扫描
[_captureSession startRunning];
//最上部view
UIView* upView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];
upView.alpha = 0.3;
upView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:upView];
//用于说明的label
UILabel * labIntroudction= [[UILabel alloc] init];
labIntroudction.backgroundColor = [UIColor clearColor];
labIntroudction.frame=CGRectMake(15, 20, 290, 50);
labIntroudction.numberOfLines=2;
labIntroudction.textColor=[UIColor whiteColor];
labIntroudction.text=@"将二维码图像置于矩形方框内,离手机摄像头10CM左右,系统会自动识别。";
[upView addSubview:labIntroudction];
[labIntroudction release];
[upView release];
//左侧的view
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 80, 20, 280)];
leftView.alpha = 0.3;
leftView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:leftView];
[leftView release];
//右侧的view
UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(300, 80, 20, 280)];
rightView.alpha = 0.3;
rightView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:rightView];
[rightView release];
//底部view
UIView * downView = [[UIView alloc] initWithFrame:CGRectMake(0, 360, 320, 120)];
downView.alpha = 0.3;
downView.backgroundColor = [UIColor blackColor];
[reader.view addSubview:downView];
[downView release];
//用于取消操作的button
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
cancelButton.alpha = 0.4;
[cancelButton setFrame:CGRectMake(20, 390, 280, 40)];
[cancelButton setTitle:@"取消" forState:UIControlStateNormal];
[cancelButton.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];
[cancelButton addTarget:self action:@selector(dismissOverlayView:)forControlEvents:UIControlEventTouchUpInside];
[reader.view addSubview:cancelButton];
}
//取消button方法
- (void)dismissOverlayView:(id)sender{
[self dismissModalViewControllerAnimated: YES];
}
//这是我加的方法(线条的动画)
-(void)stopReading{
[_captureSession stopRunning];
_captureSession = nil;
[_scanLayer removeFromSuperlayer];
[_videoPreviewLayer removeFromSuperlayer];
}
- (void)moveScanLayer:(NSTimer *)timer
{
CGRect frame = _scanLayer.frame;
if (self.qRImageView.frame.size.height-40 < _scanLayer.frame.origin.y) {
frame.origin.y = 50;
_scanLayer.frame = frame;
}else{
frame.origin.y += 5;
[UIView animateWithDuration:0.1 animations:^{
_scanLayer.frame = frame;
}];
}
}
相关文章推荐
- iOS开发笔记--自定义Zbar扫描界面
- iOS开发笔记--自定义Zbar扫描界面
- iOS开发笔记--自定义Zbar扫描界面
- iOS开发笔记--自定义Zbar扫描界面
- iOS开发笔记--自定义Zbar扫描界面
- iOS开发笔记--自定义Zbar扫描界面
- iOS中使用ZBar扫描二维码自定义扫描界面
- iOS中使用ZBar扫描二维码自定义扫描界面
- iOS中使用ZBar扫描二维码自定义扫描界面
- iOS中使用ZBar扫描二维码自定义扫描界面功能
- IOS 自定义ZbarSDK扫描界面
- iOS中使用ZBar扫描二维码自定义扫描界面
- iOS中使用ZBar扫描二维码自定义扫描界面
- 开发笔记 那些年追过的图片(三):自定义修改拍照界面retake和use按钮
- iOS开发笔记--自定义UITableViewCell
- iOS开发笔记--如何自定义启动画面Default.png加载时间
- iOS开发UI篇—以微博界面为例使用纯代码自定义cell程序编码全过程
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- iOS开发笔记17:自定义相机拍照
- IOS开发小功能2:二维码扫描界面的设计(横线上下移动)