QRコードを読み取る機能を探してたどり着いたzxing2.2の実装を試してみました。
あくまでも覚え書きです。
テスト環境:Deployment Target 6.1
ライブラリ:zxing-2.2
http://code.google.com/p/zxing/downloads/list
0_ライブラリをダウンロードした後の保存先を変更する。
筆者は1プロジェクトにつきzxing-2.2コピーを1つずつ用意する手段をとっているため、
zxing-2.2の保存先を開発するプロジェクトフォルダの配下にしている。
1_ZXingWidgetをプロジェクトに追加
プロジェクトにZXingWidget.xcodeproj (zxing-2.2/iphone/ZXingWidget/)をドロップする
2_ZXingWidgetライブラリをリンクする
Targets > Build Phases > Link Binary With Libraries
libZXingWidget.aを追加する
3_
Targets > Build Settings > Search Paths > Header Search Paths
下記のパスを追加
・../QRTest/zxing-2.2/iphone/ZXingWidget/Classes (recursive)
・../QRTest/zxing-2.2/cpp/core/src (non-recursive)
※このときパスに注意
4_フレームワークの追加
AVFoundation
AudioToolbox
CoreVideo
CoreMedia
libiconv
AddressBook
AddressBookUI
5_ヘッダーファイル
#import [UIKit/UIKit.h]
#import [ZXingWidgetController.h]
@interface QRReaderViewController : UIViewController
- (IBAction)showReadViewPressed:(id)sender;
@end
6_実装ファイル
実装する前に実装ファイルの拡張子を.mから.mm に変更する。
#import "QRReaderViewController.h"
#import [QRCodeReader.h]
@implementation QRReaderViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)showReadViewPressed:(id)sender {
// 読み取り画面を生成します。
ZXingWidgetController *zxingWidgetController = [[ZXingWidgetController alloc]
initWithDelegate:self
showCancel:YES
OneDMode:NO];
QRCodeReader *qrcodeReader = [[QRCodeReader alloc] init];
zxingWidgetController.readers = [[NSSet alloc] initWithObjects:qrcodeReader, nil];
// 読み取り画面を表示する
[self presentViewController:zxingWidgetController animated:NO completion:nil];
}
- (void)zxingController:(ZXingWidgetController*)controller
didScanResult:(NSString *)result {
// 読み取り画面を閉じる
[self dismissViewControllerAnimated:NO completion:nil];
// ----- ここに読み取り時の処理を書く -----
NSURL *url =[NSURL URLWithString:result];
// ブラウザの起動
[[UIApplication sharedApplication] openURL:url];
}
- (void)zxingControllerDidCancel:(ZXingWidgetController*)controller {
// 読み取り画面を閉じます。
[self dismissViewControllerAnimated:NO completion:nil];
}
@end
7_言語設定
Project > Build Settings > Apple LLVM compiler 4.2 - Launguage
下記の項目の設定を変更する。
・C++ Standard Library >>Compiler Default
・C++ Standard Library >>Compiler Default
最後に
実際に実装した結果、動きが遅いw iPhone5でこの機動力ではちょっと使いづらいかもw
あくまでも覚え書きです。
テスト環境:Deployment Target 6.1
ライブラリ:zxing-2.2
http://code.google.com/p/zxing/downloads/list
0_ライブラリをダウンロードした後の保存先を変更する。
筆者は1プロジェクトにつきzxing-2.2コピーを1つずつ用意する手段をとっているため、
zxing-2.2の保存先を開発するプロジェクトフォルダの配下にしている。
1_ZXingWidgetをプロジェクトに追加
プロジェクトにZXingWidget.xcodeproj (zxing-2.2/iphone/ZXingWidget/)をドロップする
2_ZXingWidgetライブラリをリンクする
Targets > Build Phases > Link Binary With Libraries
libZXingWidget.aを追加する
3_
Targets > Build Settings > Search Paths > Header Search Paths
下記のパスを追加
・../QRTest/zxing-2.2/iphone/ZXingWidget/Classes (recursive)
・../QRTest/zxing-2.2/cpp/core/src (non-recursive)
※このときパスに注意
4_フレームワークの追加
AVFoundation
AudioToolbox
CoreVideo
CoreMedia
libiconv
AddressBook
AddressBookUI
5_ヘッダーファイル
#import [UIKit/UIKit.h]
#import [ZXingWidgetController.h]
@interface QRReaderViewController : UIViewController
- (IBAction)showReadViewPressed:(id)sender;
@end
6_実装ファイル
実装する前に実装ファイルの拡張子を.mから.mm に変更する。
#import "QRReaderViewController.h"
#import [QRCodeReader.h]
@implementation QRReaderViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)showReadViewPressed:(id)sender {
// 読み取り画面を生成します。
ZXingWidgetController *zxingWidgetController = [[ZXingWidgetController alloc]
initWithDelegate:self
showCancel:YES
OneDMode:NO];
QRCodeReader *qrcodeReader = [[QRCodeReader alloc] init];
zxingWidgetController.readers = [[NSSet alloc] initWithObjects:qrcodeReader, nil];
// 読み取り画面を表示する
[self presentViewController:zxingWidgetController animated:NO completion:nil];
}
- (void)zxingController:(ZXingWidgetController*)controller
didScanResult:(NSString *)result {
// 読み取り画面を閉じる
[self dismissViewControllerAnimated:NO completion:nil];
// ----- ここに読み取り時の処理を書く -----
NSURL *url =[NSURL URLWithString:result];
// ブラウザの起動
[[UIApplication sharedApplication] openURL:url];
}
- (void)zxingControllerDidCancel:(ZXingWidgetController*)controller {
// 読み取り画面を閉じます。
[self dismissViewControllerAnimated:NO completion:nil];
}
@end
7_言語設定
Project > Build Settings > Apple LLVM compiler 4.2 - Launguage
下記の項目の設定を変更する。
・C++ Standard Library >>Compiler Default
・C++ Standard Library >>Compiler Default
最後に
実際に実装した結果、動きが遅いw iPhone5でこの機動力ではちょっと使いづらいかもw