ios原生二維碼掃描和生成
之前都是第三方的二維碼,操作簡單pod整合,美滋滋。隨著公司專案越來越噁心到大,還是自己擼一個比較實在。
demo的主要功能掃描二維碼和生成二維碼。
掃描二維碼
1.首先倒入框架
#import
2.遵守協議
<AVCaptureMetadataOutputObjectsDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>
3.主要用到的屬性設定
//捕獲裝置,預設後置攝像頭 @property (strong, nonatomic) AVCaptureDevice * device; //輸入裝置 @property (strong, nonatomic) AVCaptureDeviceInput * input; //輸出裝置,需要指定他的輸出型別及掃描範圍 @property (strong, nonatomic) AVCaptureMetadataOutput * output; //AVFoundation框架捕獲類的中心樞紐,協調輸入輸出裝置以獲得資料 @property (strong, nonatomic) AVCaptureSession * session; //展示捕獲影象的圖層,是CALayer的子類 @property (strong, nonatomic) AVCaptureVideoPreviewLayer * preview;
掃描截圖.png
4.拉起本地相簿二維碼
- (void)chooseButtonClick { if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { //關閉掃描 [self stopScan]; //1 彈出系統相簿 UIImagePickerController *pickVC = [[UIImagePickerController alloc]init]; //2 設定照片來源 /** UIImagePickerControllerSourceTypePhotoLibrary,相簿 UIImagePickerControllerSourceTypeCamera,相機 UIImagePickerControllerSourceTypeSavedPhotosAlbum,照片庫 */ pickVC.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; //3 設定代理 pickVC.delegate = self; //4.轉場動畫 self.modalTransitionStyle=UIModalTransitionStyleFlipHorizontal; [self presentViewController:pickVC animated:YES completion:nil]; } else { [self showAlertViewWithTitle:@"開啟失敗" withMessage:@"相簿開啟失敗。裝置不支援訪問相簿,請在設定->隱私->照片中進行設定!"]; } }
生成二維碼
1.二維碼的生成
/** *2.生成CIFilter(濾鏡)物件 */ CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; /** *3.恢復濾鏡預設設定 */ [filter setDefaults]; /** *4.設定資料(通過濾鏡物件的KVC) */ //存放的資訊 NSString *info = @"hahahahhahahaha"; //把資訊轉化為NSData NSData *infoData = [info dataUsingEncoding:NSUTF8StringEncoding]; //濾鏡物件kvc存值 [filter setValue:infoData forKeyPath:@"inputMessage"]; /** *5.生成二維碼 */ CIImage *outImage = [filter outputImage]; //imageView.image = [UIImage imageWithCIImage:outImage];//不處理圖片模糊,故而呼叫下面的資訊 self.codeImage.image = [outImage createNonInterpolatedWithSize:150];
2.儲存到本地相簿
UIGraphicsBeginImageContext(self.view.bounds.size); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; //獲取圖片 UIImage * image = UIGraphicsGetImageFromCurrentImageContext(); //關閉上下文 UIGraphicsEndImageContext(); completion(image); /** *將圖片儲存到本地相簿 */ UIImageWriteToSavedPhotosAlbum(image, self , @selector(saveImage:didFinishSavingWithError:contextInfo:), nil);//儲存圖片到照片庫
主要程式碼貼出來,感興趣可以去gibHub地址: https://github.com/MrBMask 這裡瞅瞅呦
作者:MrBMask
連結:https://www.jianshu.com/p/a6f5b5f943d2