你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS生成與讀取二維碼咭片

IOS生成與讀取二維碼咭片

編輯:IOS開發綜合

1、概述
1、經由過程某種特定的幾何圖形按必定紀律在立體(二維偏向上)散布的诟谇相間的圖形記載數據符號信息的
2、二維碼平日可以包括以下內容

  • 純文本
  • 咭片
  • URL

3、二維碼具有異常普遍的運用

  • 二維碼咭片
  • 掃碼付款
  • 網址(URL),掃描後主動翻開網址

2、二維碼的生成
1、生成道理
經由過程一個類CIFilter(濾鏡)包括二維碼中一切的信息,然後生成一張二維碼圖片
二維碼中央的icon(頭像),是經由過程在生成的圖片上添加一張圖片完成的
2、生成步調

  • 創立濾鏡
  • 初始化濾鏡
  • 添加二維碼信息
  • 獲得生成的二維碼圖片
  • 將二維碼圖片展現出來

3、生成的二維碼的後果圖

4、詳細代碼完成
1)、經由過程storyboard創立兩個imageView,分離用來展現二維碼圖片和頭像

2)、具有展現二維碼圖片的imageView

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

3)、生成二維碼

/**點擊屏幕的時刻顯示二維碼*/
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
  //1.創立濾鏡
  CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

  //2.恢復默許
  [filter setDefaults];

  //3.給濾鏡添加數據
  NSString *dataString = @"http://www.xxx.com/theDesertIslandOutOfTheWorld/";
//  NSString *dataString = @"世俗孤島";
  //將數據轉換成NSData類型
  NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding];
  //經由過程KVC設置濾鏡的二維碼輸出信息
  [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,則會翻開指定的收集資本
3、二維碼的掃描
1、留意:

  • 二維碼掃碼須要應用攝像頭,須要真機裝備
  • Xcode7可是收費真機調試

2、二維碼掃描的進程

  • 經由過程攝像頭掃描二維碼
  • 解析二維碼數據
  • 依據二維碼信息履行響應的操作

3、進程剖析
1)、經由過程攝像頭掃描二維碼信息須要用到AVCaptureSession類

  • 該類是用來調和從音頻/視頻輸出端口到輸入真個數據
  • 該類須要一個輸出裝備AVCaptureDeviceInput,平日是攝像頭
  • 該類須要一個輸入端,輸入指定類型的數據,有多個類可以選擇(如:AVCaptureMetadataOutput)
  • 須要挪用- startRunning辦法開啟輸出源

2)、經由過程AVCaptureSession類捕捉的數據,可以經由過程指定輸入真個過濾類型來以特定的類型解析捕捉的數據
3)、可認為輸入端AVCaptureMetadataOutput設置署理,來聽捕捉進程
4)、經由過程AVCaptureVideoPreviewLayer類將獲得的原始數據襯著到指定的圖層
4、二維碼的生成進程
經由過程成員屬性保留輸出源與輸入真個調和者(AVCaptureSession對象)

@property (nonatomic, weak) AVCaptureSession *session;

經由過程成員屬性保留展現經由過程輸出裝備輸出的元數據的圖層,用於在恰當的時刻移除圖層

@property (nonatomic, weak) AVCaptureVideoPreviewLayer *layer;

創立AVCaptureSession類的對象(簡稱:捕捉對象),用於捕捉音頻/視頻端口的數據

AVCaptureSession *session = [[AVCaptureSession alloc] init];
self.session = session;

給捕捉對象添加輸出裝備(平日是攝像頭)

//設置輸出裝備輸出數據的類型(視頻)
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
[session addInput:input];

給捕捉對象添加輸入端

AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
//設置署理
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[session addOutput:output];

設置輸出源的過濾前提(只獲得二維碼信息)

[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];

將捕捉的原始數據顯示到掌握器的view上

AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayer layerWithSession:session];
layer.frame = self.view.bounds;
[self.view.layer addSublayer:layer];

開端獲得數據

[session startRunning];

完成輸入真個署理辦法,監聽捕捉進程

- (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(@"沒有掃描到數據");
  }
}

以上就是IOS二維碼咭片生成與讀取的具體代碼引見,願望對年夜家的進修有所贊助。

【IOS生成與讀取二維碼咭片】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved