0

そのため、iPhone アプリケーション用の QR リーダーを作成する必要があります。通常、ZXING や ZBAr などのフレームワークでは、アプリケーションをダウンロードしてバーコードを読み取ることができます。アプリケーション自体に統合したい。基本的に、ボタンをタップしてQRコードを読み取れるようにしたいと考えています。これは可能ですか?もしそうなら、これに関する適切な文書はありますか?ZXing を使用してみましたが、バイナリをリンクすると libZXingWidget.a が利用できなくなります。また、ドキュメントは、アプリケーション内に統合する方法を知るのに十分ではありません. だから私に知らせてください。

4

4 に答える 4

4

ZBar をセットアップするコードは次のとおりです。SDK をプロジェクトに追加し、ライブラリをリンクしてください。

-

(void)viewDidLoad
{
        [ZBarReaderView class];
        readerView.readerDelegate = self;
        readerView.tracksSymbols = NO;

            //CHOOSE CAMERA
            if (some setting isEqual to CameraRear) {
                readerView.device = [self backFacingCameraIfAvailable];
            }
            else {
                readerView.device = [self frontFacingCameraIfAvailable];
            }

        [self relocateReaderPopover:[self interfaceOrientation]];
        [readerView start];
    }

-(AVCaptureDevice *)frontFacingCameraIfAvailable
{
    NSArray *videoDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
    AVCaptureDevice *captureDevice = nil;
    for (AVCaptureDevice *device in videoDevices)
    {
        if (device.position == AVCaptureDevicePositionFront)
        {
            captureDevice = device;
            break;
        }
    }

    //  couldn't find one on the front, so just get the default video device.
    if ( ! captureDevice)
    {
        captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    }

    return captureDevice;
}

-(AVCaptureDevice *)backFacingCameraIfAvailable
{
    NSArray *videoDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
    AVCaptureDevice *captureDevice = nil;
    for (AVCaptureDevice *device in videoDevices)
    {
        if (device.position == AVCaptureDevicePositionBack)
        {
            captureDevice = device;
            break;
        }
    }

    //  couldn't find one on the front, so just get the default video device.
    if ( ! captureDevice)
    {
        captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    }

    return captureDevice;
}

-(void)relocateReaderPopover:(UIInterfaceOrientation)toInterfaceOrientation{
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
        readerView.previewTransform = CGAffineTransformMakeRotation(M_PI_2);
    } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        readerView.previewTransform = CGAffineTransformMakeRotation(-M_PI_2);
    } else if (toInterfaceOrientation== UIInterfaceOrientationPortraitUpsideDown) {
        readerView.previewTransform = CGAffineTransformMakeRotation(M_PI);
    } else {
        readerView.previewTransform = CGAffineTransformIdentity;
    }
}
于 2012-07-24T14:18:56.293 に答える
3

これは、統合された QR コード リーダーを iPhone アプリに追加する方法に関する段階的なチュートリアルです。使用方法を知る必要がある場合は、このZXing プロジェクトの例を見てください。

于 2012-07-24T14:17:44.190 に答える
2

ZXING をテスト プロジェクトに統合することができました。少し前にこれを行ったので、直面して解決したすべての問題を覚えていない可能性があります。ワークスペース フォルダーに ZXing-2.0 フォルダーをコピーしました。内部には、cpp、docs、および iphone というフォルダーのみが残っています。ワークスペース (テスト プロジェクトを含む) に、フォルダー ZXing-2.0 から ZXingWidget プロジェクトを追加しました。これにより、リンク設定 libZXingWidget.a に追加することができました。テスト プロジェクトをビルドすると、XCode は依存関係を検出して最初にウィジェットをビルドし、次にテスト プロジェクトをビルドして libZXingWidget.a にリンクします。

これは、QRコードを検出できるカメラビュー内に表示するために実装したシンプルなView Controllerです。

//
//  MyVC.m
//
//

#import "MyVC.h"
#import "QRCodeReader.h"

@interface MyVC () {
    ZXingWidgetController *_widController;
}

@end

@implementation MyVC

@synthesize labelResultString;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    _widController = [[ZXingWidgetController alloc] initWithDelegate:(id<ZXingDelegate>)self showCancel:YES OneDMode:NO];
    QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
    NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];
    //[qrcodeReader release];
    _widController.readers = readers;
    //[readers release];
    //NSBundle *mainBundle = [NSBundle mainBundle];
    //_widController.soundToPlay = [NSURL fileURLWithPath:[mainBundle pathForResource:@"beep-beep" ofType:@"aiff"] isDirectory:NO];
    _widController.overlayView.displayedMessage = @"";
    _widController.wantsFullScreenLayout = NO;

    //[self presentModalViewController:_widController animated:NO];
    _widController.view.frame = CGRectMake(10, 10, 300, 300);//self.view.frame;
    _widController.view.autoresizingMask = UIViewAutoresizingNone;
    _widController.overlayView.frame = CGRectMake(0, 0, 300, 300);
    _widController.overlayView.cropRect = CGRectMake(20, 20, 260, 260);

    [self.view addSubview:_widController.view];

    //[_widController release];
}

- (void)viewDidUnload {
    [super viewDidUnload];

    self.labelResultString = nil;
}

- (void)dealloc {
    self.labelResultString = nil;
}

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

    [_widController viewWillAppear:animated];
}

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

    [_widController viewDidAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

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

    [_widController viewWillDisappear:animated];
}

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

    [_widController viewDidDisappear:animated];
}

#pragma mark - ZXingDelegateMethods

- (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result {
    self.labelResultString.text = result;
}

- (void)zxingControllerDidCancel:(ZXingWidgetController *)controller {
    [self dismissModalViewControllerAnimated:YES];
}

@end
于 2012-07-24T14:33:26.347 に答える
2

ZXing を正しく設定したら、QR リーダーを取得するコードは文字通り次のように簡単です。

QR 用に次の 2 人を必ずインポートしてください。

#import "ZXingWidgetController.h"
#import "QRCodeReader.h"

次に、コントローラーでコードリーダーを次のように設定します。

ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];

QRCodeReader *qrcodeReader = [[QRCodeReader alloc] init];

NSSet *readers = [[NSSet alloc] initWithObjects:qrcodeReader,nil];

widController.readers = readers;

[self presentModalViewController:widController animated:YES];

基本的に、コードの読み取りを処理するコントローラー ( ZXingWidgetController) をセットアップし、必要なすべてのタイプのコード リーダーのセットをそれに渡します (ここでは を使用しQRCodeReaderました)。最後に、モーダル ビュー コントローラーとして表示します。

<ZXingDelegate>次に、および次のdelegate関数を実装する必要があります。

- (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result
{  
    [self dismissModalViewControllerAnimated:YES];
    NSLog(@"%@",result);  //Simple NSString result.
}

- (void)zxingControllerDidCancel:(ZXingWidgetController*)controller
{
    [self dismissModalViewControllerAnimated:YES];
    NSLog(@"Cancelled");
}

最も難しい部分は、それを設定することです。このチュートリアルが最も役立つことがわかりました (リンクを使用していて申し訳ありません): How to install ZXing in Xcode 4 何か問題がある場合は、コメントも役に立ちます。

于 2012-07-24T14:38:26.097 に答える