iOSアプリ開発でZXingObjCを使ってQRコードを生成する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今回は、iOSアプリ開発で ZXingObjC ライブラリを使い、文字列から QRコード を生成するサンプルを作ってみたいと思います。

ちなみに、Android版のQRコードの生成方法については、Android Tips #42 ZXing ライブラリ (2.1) を使って QR コードを生成する を参考にしてください。

環境構築

前回と同じ、以下の環境を使用します。

  • ZXingObjC 2.1.0
  • Xcode 4.6
  • iOS SDK 6.1
  • iPod touch 5th

プロジェクトの作成、ライブラリの設定方法は、前回と同じなので 前回のブログ( iOSアプリ開発でZXingObjCを使ってQRコードを読み取る ) を参考にしてください。

サンプルの実装

以下の部品を、画面の上から順に配置します。

  • UITextField:QRコードにする文字列を入力するテキストフィールド
  • UIButton:QRコード生成ボタン
  • UIImageView:QRコードイメージ(240 x 240)

配置するとこんな感じになります。

ios_zxingobjc_encode_01

次に、ヘッダーファイルを作成します。

#import <UIKit/UIKit.h>
#import <ZXingObjC/ZXingObjC.h>

@interface ViewController : UIViewController

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

- (IBAction)createQrCodePressed:(id)sender;

@end
  • L2:ZXingObjCをインポートします。
  • L6:画面の最上部に配置したテキストフィールドと「qrcodeTxt」を接続します。
  • L7:画面の上から3番目に配置したQRコードイメージと「imageView」を接続します。
  • L9:画面の上から2番目に配置したQRコード生成ボタンと「createQrCodePressed」を接続します。

最後に、実装ファイルを作成します。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (IBAction)createQrCodePressed:(id)sender {
    [self createQrCode:self.qrcodeTxt.text];
    
    // ソフトウェアキーボードを閉じます。
    [self.qrcodeTxt resignFirstResponder];
}

- (void)createQrCode:(NSString *)qrcodeTxt
{
    if (qrcodeTxt == nil || [qrcodeTxt isEqualToString:@""]) {
        self.imageView.image = nil;
        return;
    }
    // QRコードを生成します。
    ZXMultiFormatWriter* writer = [[ZXMultiFormatWriter alloc] init];
    CGSize imageSize = self.imageView.frame.size;
    ZXBitMatrix* result = [writer encode:qrcodeTxt
                                  format:kBarcodeFormatQRCode
                                   width:imageSize.width
                                  height:imageSize.height
                                   error:nil];
    if (result == nil) {
        self.imageView.image = nil;
        return;
    }
    // QRコードを表示します。
    CGImageRef qrImageRef = [ZXImage imageWithMatrix:result].cgimage;
    self.imageView.image = [UIImage imageWithCGImage:qrImageRef];
}

@end
  • L28:生成したQRコード画像がソフトウェアキーボードに隠れてしまうので、ここでソフトウェアキーボードを閉じます。
  • L38 ~ L44:QRコードを生成しています。
  • L50 ~ L51:生成したQRコード画像を画面に表示しています。

シンプルですが、これで実装完了です。

動作確認

では、動かしてみます。

ios_zxingobjc_encode_02

起動したらテキストフィールドをタップして、「http://classmethod.jp」と入力します。

ios_zxingobjc_encode_03

そして、「QRコード生成」ボタンをタップします。

ios_zxingobjc_encode_04

入力した文字列のQRコードが生成されました!

ちなみに、環境設定や使い方については、
https://github.com/TheLevelUp/ZXingObjC#readme と、
付属のサンプル( ZXingObjC-2.1.0/examples/QrCodeTest/QrCodeTest.xcodeproj )を参考にするとよいでしょう。

ではでは。