您的位置:首页 > 移动开发 > IOS开发

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;

}];

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: