iOS 原生二維碼掃描和掃描相簿中的二維碼

效果圖:
圖片發(fā)自簡(jiǎn)書App
#import "SaoYiSaoController.h"
#import <AVFoundation/AVFoundation.h>
#import "SaoMaTiaoZhuanController.h"
@interface SaoYiSaoController ()<AVCaptureMetadataOutputObjectsDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate>
@property (nonatomic ,strong) AVCaptureSession *captureSession;
@property (nonatomic ,strong) AVCaptureVideoPreviewLayer *videoPreviewLayer;
@end

@implementation SaoYiSaoController

- (void)viewWillAppear:(BOOL)animated{
    //開始掃碼
    [self.captureSession startRunning];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    // Do any additional setup after loading the view.
    [self createSaoMiaoErWeiMa];
    
    UIBarButtonItem *ri = [[UIBarButtonItem alloc]initWithTitle:@"相冊(cè)" style:UIBarButtonItemStylePlain target:self action:@selector(xiangCe)];
    [self.navigationItem setRightBarButtonItem:ri];
    //創(chuàng)建掃碼框
    UIImageView *imgV = [[UIImageView alloc]initWithFrame:CGRectMake(kWidth/2-100, kHeight/2-100, 200, 200)];
    imgV.image = [UIImage imageNamed:@"5b2c3a1c9b1488596cc1faf53c35fbd0.png"];
    [self.view addSubview:imgV];
}

- (void)createSaoMiaoErWeiMa{
    //初始化捕捉設(shè)備AVCaptureDevice
    AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    
    //創(chuàng)建輸入
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:nil];
    if (!input) {
        return;
    }
    

    //創(chuàng)建輸出
    AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init];
    
    //創(chuàng)建一個(gè)會(huì)話祥山,并添加輸入和輸出
    self.captureSession = [[AVCaptureSession alloc] init];
    [self.captureSession addInput:input];
    [self.captureSession addOutput:captureMetadataOutput];
    //設(shè)置為二維碼類型
    [captureMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]];
    
    //創(chuàng)建圖層,攝像頭捕捉到的畫面都會(huì)在這個(gè)圖層顯示
    self.videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];
    //設(shè)置圖層填充方式
    [self.videoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
    // 設(shè)置圖層的frame
    [self.videoPreviewLayer setFrame:self.view.layer.bounds];
    //將圖層添加到預(yù)覽view的圖層上
    [self.view.layer addSublayer:self.videoPreviewLayer];
    //創(chuàng)建一個(gè)串行隊(duì)列匹中,并設(shè)置代理
    dispatch_queue_t dispatchQueue;
    dispatchQueue = dispatch_queue_create("myQueue", NULL);
    [captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatchQueue];
    //設(shè)置掃碼范圍
    captureMetadataOutput.rectOfInterest = CGRectMake((kHeight/2-100)/kHeight,
                                                      kWidth/2/kHeight,
                                                      200/kHeight,
                                                      200/kWidth);
}
#pragma mark - 掃碼完成后調(diào)用此方法
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
    NSString *str;
    //判斷是否有數(shù)據(jù)
    if (metadataObjects != nil && [metadataObjects count] > 0) {
        AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0];
        //判斷回傳的數(shù)據(jù)類型
        if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) {
            str = [metadataObj stringValue];
        }
        //跳轉(zhuǎn)
        [self pushC:str];
        //結(jié)束捕獲
        [self.captureSession stopRunning];
    }
    
}
#pragma mark - 打開系統(tǒng)相簿
- (void)xiangCe{
    UIImagePickerController *photoPicker = [[UIImagePickerController alloc] init];
    photoPicker.delegate = self;
    //設(shè)置控制器類型系統(tǒng)相簿
    photoPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    photoPicker.view.backgroundColor = [UIColor whiteColor];
    [self presentViewController:photoPicker animated:YES completion:NULL];
}
//選取照片/視頻或拍照完成完成之后調(diào)用
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    //退出相簿控制器
    [picker dismissViewControllerAnimated:NO completion:nil];
    NSString *str;
    //取出選中的圖片
    UIImage *srcImage = [info objectForKey:UIImagePickerControllerOriginalImage];
    //轉(zhuǎn)換為CIImage
    CIImage *ciIma = [CIImage imageWithCGImage:srcImage.CGImage];
    //創(chuàng)建探測(cè)器
    CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}];
    NSArray *ary = [detector featuresInImage:ciIma];
    //取出探測(cè)到的數(shù)據(jù)
    for (CIQRCodeFeature *fe in ary) {
        str = fe.messageString;
        
    }
    [self pushC:str];
}

#pragma mark - 跳轉(zhuǎn)控制器
- (void)pushC:(NSString *)str{
    //跳轉(zhuǎn)控制器
    self.hidesBottomBarWhenPushed = YES;
    SaoMaTiaoZhuanController *smtz = [[SaoMaTiaoZhuanController alloc]init];
    smtz.url = str;
    dispatch_sync(dispatch_get_main_queue(), ^{
    [self.navigationController pushViewController:smtz animated:YES];
    });
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踪少,一起剝皮案震驚了整個(gè)濱河市促王,隨后出現(xiàn)的幾起案子碌奉,更是在濱河造成了極大的恐慌劝贸,老刑警劉巖潮罪,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件康谆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嫉到,警方通過查閱死者的電腦和手機(jī)沃暗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來何恶,“玉大人孽锥,你說我怎么就攤上這事∠覆悖” “怎么了惜辑?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)疫赎。 經(jīng)常有香客問我盛撑,道長(zhǎng),這世上最難降的妖魔是什么捧搞? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任抵卫,我火速辦了婚禮,結(jié)果婚禮上胎撇,老公的妹妹穿的比我還像新娘介粘。我一直安慰自己,他們只是感情好晚树,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布碗短。 她就那樣靜靜地躺著,像睡著了一般题涨。 火紅的嫁衣襯著肌膚如雪偎谁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天纲堵,我揣著相機(jī)與錄音巡雨,去河邊找鬼。 笑死席函,一個(gè)胖子當(dāng)著我的面吹牛铐望,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼正蛙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼督弓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乒验,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤愚隧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后锻全,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狂塘,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年鳄厌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荞胡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡了嚎,死狀恐怖泪漂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歪泳,我是刑警寧澤窖梁,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站夹囚,受9級(jí)特大地震影響纵刘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荸哟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一假哎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鞍历,春花似錦舵抹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迎献。三九已至淳地,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伦糯,已是汗流浹背装畅。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國打工靠娱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掠兄。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓像云,卻偏偏與公主長(zhǎng)得像锌雀,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子迅诬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 點(diǎn)擊查看http://www.knowsky.com/884148.html
    爵笙彥閱讀 469評(píng)論 0 0
  • 對(duì)于現(xiàn)在的App應(yīng)用來說腋逆,掃描二維碼這個(gè)功能是再正常不過的一個(gè)功能了,在早期開發(fā)這些功能的時(shí)候侈贷,大家或多或少的都接...
    Originalee閱讀 1,772評(píng)論 2 12
  • 表白铐维? 一定有人會(huì)說柬泽,癡心妄想慎菲,你們程序員哪來的對(duì)象嫁蛇! 然而,作為程序員露该,給我一個(gè)類睬棚,我可以創(chuàng)建無數(shù)個(gè)對(duì)象。 在i...
    SJPOP閱讀 5,800評(píng)論 31 173
  • 沒來由的感冒了解幼,也不知道是不是昨天的大龍蝦惹的禍抑党,由上火演變成感冒么?小家伙的氣管炎也還沒有好撵摆,夠折騰的呀底靠。 今天...
    霜月歌寒閱讀 138評(píng)論 0 1
  • 近日暑中,看到一本書,題目是《當(dāng)你生病時(shí)鲫剿,你會(huì)想起誰》鳄逾,看到它,我不由得想起了我的媽媽灵莲。 前段時(shí)間雕凹,...
    言行合一閱讀 352評(píng)論 2 3