要引入一个静态库
libiconv.tbd
@interface FHomeViewController ()<ZBarReaderDelegate>
{
//二维码
int num;
BOOL upOrdown;
NSTimer * qrTimer;
}
@property (strong, nonatomic) UIImageView * line;
// 扫一扫
- (void)buttonMenuToRight
{
num = 0;
upOrdown = NO;
//初始话ZBar
ZBarReaderViewController * reader = [ZBarReaderViewController new];
//设置代理
reader.readerDelegate = self;
//支持界面旋转
reader.supportedOrientationsMask = ZBarOrientationMaskAll;
reader.showsHelpOnFail = NO;
reader.scanCrop = CGRectMake(0.1, 0.2, 0.8, 0.8);//扫描的感应框
// 图片扫描器
ZBarImageScanner * scanner = reader.scanner;
[scanner setSymbology:ZBAR_I25
config:ZBAR_CFG_ENABLE
to:0];
UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, iPhoneWidth, [[UIScreen mainScreen] bounds].size.height)];
view.backgroundColor = [UIColor clearColor];
reader.cameraOverlayView = view;
UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, iPhoneWidth-40, 40)];
label.text = @"请将扫描的二维码至于下面的框内\n谢谢!";
label.textColor = [UIColor whiteColor];
label.textAlignment = 1;
label.lineBreakMode = 0;
label.numberOfLines = 2;
label.backgroundColor = [UIColor clearColor];
[view addSubview:label];
UIImageView * image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"frame.png"]];
image.frame = CGRectMake(30, 80, iPhoneWidth-60, iPhoneWidth-60);
[view addSubview:image];
_line = [[UIImageView alloc] initWithFrame:CGRectMake(10, 0, image.frame.size.width-20, 17)];
_line.image = [UIImage imageNamed:@"greenbar1"];
[image addSubview:_line];
//定时器,设定时间过1.5秒,
qrTimer = [NSTimer scheduledTimerWithTimeInterval:.02 target:self selector:@selector(animation1) userInfo:nil repeats:YES];
[self presentViewController:reader animated:YES completion:^{
}];
}
-(void)animation1
{
if (upOrdown == NO) {
num ++;
_line.frame = CGRectMake(10, 2*num, iPhoneWidth-80, 17);
if (2*num >= iPhoneWidth-80) {
upOrdown = YES;
_line.image = [UIImage imageNamed:@"greenbar2"];
}
}
else {
num --;
_line.frame = CGRectMake(10, 2*num, iPhoneWidth-80, 17);
if (num <= 0) {
upOrdown = NO;
_line.image = [UIImage imageNamed:@"greenbar1"];
}
}
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[qrTimer invalidate];
_line.frame = CGRectMake(10, 10, iPhoneWidth-80, 2);
num = 0;
upOrdown = NO;
[picker dismissViewControllerAnimated:YES completion:^{
[picker removeFromParentViewController];
}];
}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[qrTimer invalidate];
_line.frame = CGRectMake(10, 10, iPhoneWidth-80, 2);
num = 0;
upOrdown = NO;
[picker dismissViewControllerAnimated:YES completion:^{
[picker removeFromParentViewController];
UIImage * image = [info objectForKey:UIImagePickerControllerOriginalImage];
//初始化
ZBarReaderController * read = [ZBarReaderController new];
// ZBarReaderController * read = [[ZBarReaderController alloc] init];
//设置代理
read.readerDelegate = self;
CGImageRef cgImageRef = image.CGImage;
ZBarSymbol * symbol = nil;
id <NSFastEnumeration> results = [read scanImage:cgImageRef];
for (symbol in results)
{
break;
}
NSString * result;
if ([symbol.data canBeConvertedToEncoding:NSShiftJISStringEncoding])
{
result = [NSString stringWithCString:[symbol.data cStringUsingEncoding: NSShiftJISStringEncoding] encoding:NSUTF8StringEncoding];
}
else
{
result = symbol.data;
}
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"扫描结果" message:result delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"前往", nil];
[alert show];
NSLog(@"result = %@",result);
}];
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex==1) {
[[UIApplication sharedApplication] openURL:[ NSURL URLWithString:alertView.message]];
}
}
本文介绍了一种使用iOS设备扫描二维码并获取ShiftJIS编码文本的方法,包括初始化ZBarReaderViewController,设置代理,显示扫描界面,处理扫描结果,并在扫描完成后展示扫描结果的流程。

被折叠的 条评论
为什么被折叠?



