IOS生成與讀取二維碼名片
一、概述
1、通過某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號(hào)信息的
2、二維碼通常可以包含以下內(nèi)容
- 純文本
- 名片
- URL
3、二維碼具有非常廣泛的應(yīng)用
- 二維碼名片
- 掃碼付款
- 網(wǎng)址(URL),掃描后自動(dòng)打開網(wǎng)址
二、二維碼的生成
1、生成原理
通過一個(gè)類CIFilter(濾鏡)包含二維碼中所有的信息,然后生成一張二維碼圖片
二維碼中間的icon(頭像),是通過在生成的圖片上添加一張圖片實(shí)現(xiàn)的
2、生成步驟
- 創(chuàng)建濾鏡
- 初始化濾鏡
- 添加二維碼信息
- 獲取生成的二維碼圖片
- 將二維碼圖片展示出來
3、生成的二維碼的效果圖
4、具體代碼實(shí)現(xiàn)
1)、通過storyboard創(chuàng)建兩個(gè)imageView,分別用來展示二維碼圖片和頭像
2)、擁有展示二維碼圖片的imageView
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
3)、生成二維碼
/**點(diǎn)擊屏幕的時(shí)候顯示二維碼*/ - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //1.創(chuàng)建濾鏡 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; //2.恢復(fù)默認(rèn) [filter setDefaults]; //3.給濾鏡添加數(shù)據(jù) NSString *dataString = @"http://www.xxx.com/theDesertIslandOutOfTheWorld/"; // NSString *dataString = @"世俗孤島"; //將數(shù)據(jù)轉(zhuǎn)換成NSData類型 NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding]; //通過KVC設(shè)置濾鏡的二維碼輸入信息 [filter setValue:data forKey:@"inputMessage"]; //4.獲取輸出的二維碼圖片(CIImage類型) CIImage *outImage = [filter outputImage]; //將CIImage類型的圖片裝換成UIImage類型的圖片 UIImage *image = [UIImage imageWithCIImage:outImage]; //5.顯示二維碼圖片 self.imageView.image = image; }
4)、通過二維碼掃描工具,可以掃描生成的二維碼
若二維碼的輸入信息是URL,則會(huì)打開指定的網(wǎng)絡(luò)資源
三、二維碼的掃描
1、注意:
- 二維碼掃碼需要使用攝像頭,需要真機(jī)設(shè)備
- Xcode7可是免費(fèi)真機(jī)調(diào)試
2、二維碼掃描的過程
- 通過攝像頭掃描二維碼
- 解析二維碼數(shù)據(jù)
- 根據(jù)二維碼信息執(zhí)行相應(yīng)的操作
3、過程分析
1)、通過攝像頭掃描二維碼信息需要用到AVCaptureSession類
- 該類是用來協(xié)調(diào)從音頻/視頻輸入端口到輸出端的數(shù)據(jù)
- 該類需要一個(gè)輸入設(shè)備AVCaptureDeviceInput,通常是攝像頭
- 該類需要一個(gè)輸出端,輸出指定類型的數(shù)據(jù),有多個(gè)類可以選擇(如:AVCaptureMetadataOutput)
- 需要調(diào)用- startRunning方法開啟輸入源
2)、通過AVCaptureSession類捕獲的數(shù)據(jù),可以通過指定輸出端的過濾類型來以特定的類型解析捕獲的數(shù)據(jù)
3)、可以為輸出端AVCaptureMetadataOutput設(shè)置代理,來聽捕獲過程
4)、通過AVCaptureVideoPreviewLayer類將獲取的原始數(shù)據(jù)渲染到指定的圖層
4、二維碼的生成過程
通過成員屬性保存輸入源與輸出端的協(xié)調(diào)者(AVCaptureSession對(duì)象)
@property (nonatomic, weak) AVCaptureSession *session;
通過成員屬性保存展示通過輸入設(shè)備輸入的元數(shù)據(jù)的圖層,用于在適當(dāng)?shù)臅r(shí)候移除圖層
@property (nonatomic, weak) AVCaptureVideoPreviewLayer *layer;
創(chuàng)建AVCaptureSession類的對(duì)象(簡(jiǎn)稱:捕獲對(duì)象),用于捕獲音頻/視頻端口的數(shù)據(jù)
AVCaptureSession *session = [[AVCaptureSession alloc] init]; self.session = session;
給捕獲對(duì)象添加輸入設(shè)備(通常是攝像頭)
//設(shè)置輸入設(shè)備輸入數(shù)據(jù)的類型(視頻) AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; [session addInput:input];
給捕獲對(duì)象添加輸出端
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init]; //設(shè)置代理 [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; [session addOutput:output];
設(shè)置輸入源的過濾條件(只獲取二維碼信息)
[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
將捕獲的原始數(shù)據(jù)顯示到控制器的view上
AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayer layerWithSession:session]; layer.frame = self.view.bounds; [self.view.layer addSublayer:layer];
開始獲取數(shù)據(jù)
[session startRunning];
實(shí)現(xiàn)輸出端的代理方法,監(jiān)聽捕獲過程
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { if (metadataObjects.count > 0) { //獲取輸出端的信息 AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject]; NSLog(@"%@", object.stringValue); //停止掃描 [self.session stopRunning]; //將展示圖層移除 [self.layer removeFromSuperlayer]; } else { NSLog(@"沒有掃描到數(shù)據(jù)"); } }
以上就是IOS二維碼名片生成與讀取的詳細(xì)代碼介紹,希望對(duì)大家的學(xué)習(xí)有所幫助。
- iOS和Android用同一個(gè)二維碼實(shí)現(xiàn)跳轉(zhuǎn)下載鏈接的方法
- iOS實(shí)現(xiàn)二維碼的掃描功能
- ios swift3.0實(shí)現(xiàn)二維碼掃描、生成、識(shí)別示例代碼
- IOS筆記061之二維碼的生成和掃描
- ios原生二維碼掃描
- iOS模仿微信長(zhǎng)按識(shí)別二維碼的多種方式
- iOS 條碼及二維碼掃描(從相冊(cè)中讀取條形碼/二維碼)及掃碼過程中遇到的坑
- iOS自帶原生二維碼掃描的實(shí)現(xiàn)
- iOS 原生實(shí)現(xiàn)掃描二維碼和條形碼功能限制掃描區(qū)域
- iOS第三方框架二維碼生成與掃描
相關(guān)文章
iOS Moya實(shí)現(xiàn)OAuth請(qǐng)求的方法
這篇文章主要介紹了iOS Moya實(shí)現(xiàn)OAuth請(qǐng)求的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12iOS實(shí)現(xiàn)類似格瓦拉電影的轉(zhuǎn)場(chǎng)動(dòng)畫
這篇文章主要給大家介紹了利用iOS如何實(shí)現(xiàn)類似格瓦拉電影的轉(zhuǎn)場(chǎng)動(dòng)畫,文中給出了詳細(xì)步驟實(shí)現(xiàn)代碼,對(duì)大家的學(xué)習(xí)和理解很有幫助,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-11-11iOS實(shí)現(xiàn)換膚功能的簡(jiǎn)單處理框架(附源碼)
這篇文章主要給大家介紹了關(guān)于iOS實(shí)現(xiàn)換膚功能的簡(jiǎn)單處理框架,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02iOS的HTTP請(qǐng)求和請(qǐng)求回執(zhí)類用法小結(jié)
這里為大家整理了iOS的HTTP請(qǐng)求和請(qǐng)求回執(zhí)類用法小結(jié),包括發(fā)送請(qǐng)求的NSURLRequest、NSMutableURLRequest和負(fù)責(zé)回復(fù)的NSURLResponse類的常用方法和屬性,需要的朋友可以參考下2016-06-06iOS 自定義狀態(tài)欄和導(dǎo)航欄詳細(xì)介紹
這篇文章主要介紹了iOS 自定義狀態(tài)欄和導(dǎo)航欄詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-11-11