この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
今回は、iOSアプリ開発で ZXingObjC ライブラリを使い、URLの QRコード を読み取り、ブラウザで表示するサンプルを作ってみたいと思います。
実は、先日書いたZXing 2.1のブログ とほぼ同じ動きをするサンプルになりますが、 今回は ZXing を Objective-C に移植した ZXingObjC ライブラリを使用します。 ZXing で手間のかかった環境設定周りの作業が、ZXingObjC ではほとんどなくなるので、非常に使いやすくなっています。
環境構築
今回は、以下の環境を使用します。
- ZXingObjC 2.1.0
- Xcode 4.6
- iOS SDK 6.1
- iPod touch 5th
まず、サンプル用のプロジェクト「SampleZXingObjC」を作成します
(「Single View Application」テンプレート、ストーリーボード使用、ARC使用)。
次にライブラリをダウンロードします。
https://github.com/TheLevelUp/ZXingObjC/tags
から ZXingObjC-2.1.0.zip をダウンロードしましょう。
ダウンロードしたら、ZXingObjC.xcodeproj をドラッグ&ドロップでSampleZXingObjCプロジェクトに追加します。
次に、libZXingObjC-iOS.a のリンクを追加します。
つづけて、ZXingObjC-iOS(ZXingObjC) を Target Dependencies に追加します。
最後に、以下のフレームワークを追加します。
- AVFoundation.framework
- CoreGraphics.framework
- CoreMedia.framework
- CoreVideo.framework
- ImageIO.framework
- QuartzCore.framework
これで環境構築完了です。エラーもありません。ZXing より簡単です。
サンプルの実装
サンプルの画面を作っていきます。
シンプルに読み取り画面を表示するボタンだけ配置します。
次に、ヘッダーファイルを作成します。
ViewController.h
#import <UIKit/UIKit.h>
#import <ZXingObjC/ZXingObjC.h>
@interface ViewController : UIViewController
<ZXCaptureDelegate>
- (IBAction)showReadViewPressed:(id)sender;
@end
最後に、実装ファイルを作成します。
ViewController.m
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,retain) ZXCapture* zxcapture;
@end
@implementation ViewController
@synthesize zxcapture;
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (IBAction)showReadViewPressed:(id)sender {
self.zxcapture = [[ZXCapture alloc] init];
zxcapture.delegate = self;
// 背面カメラを使います。
zxcapture.camera = zxcapture.back;
UIViewController* vc = [[UIViewController alloc] init];
zxcapture.layer.frame = vc.view.bounds;
[vc.view.layer addSublayer:zxcapture.layer];
[zxcapture start];
// 読み取り画面を表示します。
[self presentViewController:vc animated:NO completion:nil];
}
- (void)captureResult:(ZXCapture *)capture result:(ZXResult *)result
{
if (result.barcodeFormat != kBarcodeFormatQRCode){
return;
}
// ブラウザを起動します。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:result.text]];
// 読み取り画面を閉じます。
[self dismissViewControllerAnimated:NO completion:nil];
[zxcapture stop];
self.zxcapture = nil;
}
@end
これでサンプルの実装は完了です。
動作確認
まず、QRコードを用意します。このコードは文字列にすると http://classmethod.jp になります。
では、アプリを起動します。
「読み取り画面表示」ボタンをタップして、読み取り画面を表示して、QRコードを認識させます。
QRコードを認識した直後に、ブラウザが起動しました!
ちなみに、環境設定や使い方については、
https://github.com/TheLevelUp/ZXingObjC#readme はもちろん、
付属のサンプル( ZXingObjC-2.1.0/examples/BarcodeScanner/BarcodeScanner.xcodeproj )も参考になります。
次回は、ZXingObjC を使って QRコード を生成(エンコード)してみたいと思います。
ではでは。