一。导入ZBarSDK及其依赖库(这不是本文侧重点)

    1、下载地址 https://github.com/bmorton/ZBarSDK
    2、导入头文件 #import "ZBarSDK.h" 实现委托事件 <ZBarReaderDelegate>

二。具体方法

1.viewController.m文件

#import "ViewController.h"

#import "ZBarSDK.h"

#import "AFNetworking.h"

#import "ZbarOverlayView.h"

@interface ViewController ()<ZBarReaderDelegate>

{

ZBarReaderView * reader;

ZbarOverlayView *_overLayView;

}

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@property (weak, nonatomic) IBOutlet UILabel *goods_name;

@property (weak, nonatomic) IBOutlet UILabel *goods_code;

@property (weak, nonatomic) IBOutlet UILabel *manuName;

@end

@implementation ViewController

- (IBAction)didBt:(UIButton *)sender {

reader.hidden = NO;

}

//扫描成功回调方法

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{

id results = [info objectForKey:ZBarReaderControllerResults];

ZBarSymbol * symbol;

for(symbol in results)

break;

_imageView.image = [info objectForKey:UIImagePickerControllerOriginalImage];

[picker dismissViewControllerAnimated:YES completion:nil];

NSLog(@"%@  %u----%@----%d",symbol.data,symbol.type,symbol.typeName,symbol.count);

//扫描结果得到产品编号

[self httpCode:symbol.data];

}

//运用AFNetworking post请求 得到产品信息(关于AFNetworking网上很多例子)

-(void)httpCode:(NSString *)code{

//方法一

/*中国商品信息服务平台

http://search.anccnet.com/searchResult2.aspx

*/

/*

//方法一:中国商品信息服务平台

http://search.anccnet.com/searchResult2.aspx

//方法二:第三方接口

http://www.mxnzp.com/api/barcode/goods/details

本例子采用方法二

*/

//请求路径

NSString * URLString = @"http://www.mxnzp.com/api/barcode/goods/detail?";

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

//设置返回类型

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", nil];

// 请求参数设置

NSDictionary *dict = @{

@"barcode":code,

};

//2、发送请求

[manager POST:URLString parameters:dict progress:^(NSProgress * _Nonnull downloadProgress) {

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

NSDictionary* json = [NSJSONSerialization

JSONObjectWithData:responseObject

options:kNilOptions

error:nil];

NSLog(@"----------%@----%@",responseObject,json);

if ([[json objectForKey:@"error_code"] integerValue] == 0) {

self.goods_name.text = [json objectForKey:@"data"][@"goodsName"];

self.goods_code.text = [json objectForKey:@"data"][@"code"];

self.manuName.text = [json objectForKey:@"data"][@"manuName"];

reader.hidden = YES;

}

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

NSLog(@"%@",error);

}];

}

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

[self init_camera];

}

- (void) init_camera

{

reader = [ZBarReaderView new];

ZBarImageScanner * scanner = [ZBarImageScanner new];

[scanner setSymbology:ZBAR_PARTIAL config:0 to:0];

[reader initWithImageScanner:scanner];

reader.readerDelegate = self;

const float h = [UIScreen mainScreen].bounds.size.height;

const float w = [UIScreen mainScreen].bounds.size.width;

const float h_padding = 0.20*w;

const float v_padding = 60;

CGRect reader_rect = CGRectMake(h_padding, v_padding,

w * 0.6, w * 0.6);//视图中的一小块,实际使用中最好传居中的区域

CGRect reader_rect1 = CGRectMake(0, 0, w, h);//全屏模式

reader.frame = reader_rect1;

reader.backgroundColor = [UIColor redColor];

[reader start];

[self.view addSubview: reader];

_overLayView = [[ZbarOverlayView alloc]initWithFrame:reader.frame];//添加覆盖视图

//    [_overLayView startAnimation];

_overLayView.transparentArea = reader_rect;//设置中间可选框大小

[reader addSubview:_overLayView];

reader.scanCrop = [self getScanCrop:reader_rect readerViewBounds:reader_rect1];;// CGRectMake(100 / h,0.5, 1/3.0,0.4);

}

-(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)readerViewBounds

{

CGFloat fullWidth = readerViewBounds.size.width;

CGFloat fullHeight = readerViewBounds.size.height;

CGFloat x,y,width,height;

x = rect.origin.x;

y = rect.origin.y;

width = rect.size.width;

height = rect.size.height;

if (x + width > fullWidth) {

if (width > fullWidth) {

width = fullWidth;

}else{

x = 0;

}

}

if (y + height > fullHeight) {

if (height > fullHeight) {

height = fullHeight;

}else{

y = 0;

}

}

CGFloat x1,y1,width1,height1;

x1 = (fullWidth - width - x) / fullWidth;

y1 = y / fullHeight;

width1 = width / fullWidth;

height1 = rect.size.height / readerViewBounds.size.height;

NSLog(@"frame:%@",NSStringFromCGRect(CGRectMake(y1, x1,height1, width1)));

return CGRectMake(y1, x1,height1, width1);

}

- (void) readerView:(ZBarReaderView *)readerView didReadSymbols: (ZBarSymbolSet *)symbols fromImage:(UIImage *)image

{

ZBarSymbol * s = nil;

for (s in symbols)

{

NSLog(@"----%@",s.data);

self.goods_code.text = s.data;

_imageView.image = image;

//扫描结果得到产品编号

[self httpCode:s.data];

break;

}

}

- (void)viewDidDisappear:(BOOL)animated

{

[super viewDidDisappear:animated];

[_overLayView stopAnimation];

}

三。实现效果

四。如有问题可以联系。

1.邮箱:liuzhuan155@163.com

2.QQ:282020508

扫描条形码获取商品信息(iOS 开发)的更多相关文章

  1. 导入外部proto获取商品信息

    Models.proto syntax = "proto3"; package services; //商品模型 message ProdModel { int32 prod_id ...

  2. python:爬虫获取淘宝/天猫的商品信息

    [需求]输入关键字,如书包,可以搜索出对应商品的信息,包括:商品标题.商品链接.价格范围:且最终的商品信息需要符合:包邮.价格差不会超过某数值 #coding=utf-8 ""&q ...

  3. iOS开发如何提高

    阅读博客 在现在这个碎片化阅读流行的年代,博客的风头早已被微博盖过.而我却坚持写作博客,并且大量地阅读同行的iOS开发博客.博客的文章长度通常在 3000字左右,许多iOS开发知识都至少需要这样的篇幅 ...

  4. 使用selenium抓取淘宝的商品信息

    淘宝的页面大量使用了js加载数据,所以采用selenium来进行爬取更为简单,selenum作为一个测试工具,主要配合无窗口浏览器phantomjs来使用. import re from seleni ...

  5. iOS开发中获取WiFi相关信息

    iOS 开发中难免会遇到很多与网络方面的判断,这里做个汇总,大多可能是与WiFi相关的. 1.Ping域名.Ping某IP 有 时候可能会遇到ping 某个域名或者ip通不通,再做下一步操作.这里的p ...

  6. ios开发-获取手机相关信息

    今天在做客户端的时候,里面有个意见反馈功能. 调用系统带的邮件功能,发送邮件到指定邮箱. 然后我就想,应该在邮件正文部分添加手机相关内容,比如型号,版本,应用程序的版本等等,这样不仅使用者方便,开发者 ...

  7. iOS开发-Swift获取手机设备信息(UIDevice)

    使用UiDevice获取设备信息 获取设备名称 let name = UIDevice.currentDevice().name 获取设备系统名称 let systemName = UIDevice. ...

  8. iOS开发-获取设备型号信息

    开发中有的时候查看设计统计数据,或者通过日志查看错误信息,这个时候我们就需要获取获取设备信息,看下关于设备有几种方法: NSLog(@"%@",[[UIDevice current ...

  9. iOS开发-二维码扫描和应用跳转

    iOS开发-二维码扫描和应用跳转   序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...

随机推荐

  1. 【模版 Luogu P3808/P3796/P5357】AC自动机(简论)

    浙江集训Day9,没有出任何实质性成果,只好把昨天打完的板子记一下. 该博客基于luogu的三道模版题.只有一个大致的讲解,主要提供代码给自己参考. ------------------------- ...

  2. 杂篇-之裸眼3D渲染相机及画面矫正

    主题公园类,或大型广场led屏幕,直角幕,三维影片如何制作,和最终画面如何矫正还原. 前两天,一朋友做的项目,大概就是一个柱状的led屏幕,可能是立在广场街角等处,如果这样子,那个柱状体的有颜色的两面 ...

  3. wirshark找不到本地接口

    解决方法: 1.以管理员权限运行wireshark 2.以管理员身份运行cmd,输入net start npf,打开网络抓包服务,运行wireshark legacy,选择要抓包的网卡

  4. HOOK API函数跳转详解

    原文链接:https://blog.csdn.net/cosmoslife/article/details/7670951 结合课件逆向11分析

  5. Android的Toolbar(含溢出菜单设置[弹出菜单的使用])的使用PopMenu的样式

    http://blog.csdn.net/yingtian648/article/details/52432438(转载) 1.在Toolbar.xml中设置弹出菜单的风格(app:popupThem ...

  6. 从Paxos到Zookeeper 分布式一致性原理与实践读书心得

    一 本书作者介绍 此书名为从Paxos到ZooKeeper分布式一致性原理与实践,作者倪超,阿里巴巴集团高级研发工程师,国家认证系统分析师,毕业于杭州电子科技大学计算机系.2010年加入阿里巴巴中间件 ...

  7. 第8.14节 Python类中内置方法__str__详解

    一. object类内置方法__str__和函数str 类的内置方法__str__和内置函数str实际上实现的是同一功能,实际上str调用的就是__str__方法,只是调用方式不同,二者的调用语法如下 ...

  8. PyQt学习随笔:QStandardItemModel使用注意事项

    老猿Python博文目录 老猿Python博客地址 在使用QStandardItemModel或其派生类作为view对象的数据存储时,有如下几点需要注意: 1.如果是多行多列的数据存储,对应视图如果没 ...

  9. 写入到csv文件的两种方式(pd.DaaFrame 和 csv.writerow)

    第一种: pd.DataFrame to_csv tmp = pd.DataFrame({"id":[str(i) for i in range(len(test_x))],f&q ...

  10. 开始是为了结束,结束是新的开始——NOI 2020 游记

    Day 0 报道日 晚上的时候我们的教练给我们做考前动员.给我们讲:NOI的五个小时需要认真的规划,不能被T1打乱节奏.他让我们思考明天的策略,把可能出问题的地方都想清楚. 结果后来,宿管给我测体温, ...