본문 바로가기
프로그래밍/iOS

ZXing 라이브러리를 이용한 QR코드 리더 앱 개발하기 #2. 앱 구현하기

by 백룡화검 2012. 4. 25.

이전 포스팅에서 이어집니다.

2011/09/05 - [공부/iOS] - ZXing 라이브러리를 이용한 QR코드 리더 앱 개발하기 #1. ZXing 라이브러리 추가


루트 뷰 컨트롤러 추가
닙(Xib) 파일을 포함하는 새 뷰 컨트롤러를 프로젝트에 추가한다. 이름은 RootViewController로 한다. 추가 후 ZXingTestAppDelegate.m 파일과 RootViewController.m 파일의 확장자를 'mm' 으로 변경한다.



* 프로퍼티 선언, 릴리즈 코드는 생략.

RootViewController.xib
QR코드 스캔 결과를 표시할 읽기 전용의 UITextField 컨트롤과 UIButton 컨트롤을 추가한다.



RootViewController.h
ZXingDelegate 프로토콜을 추가하고 아웃렛, 액션 매서드를 선언한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#import <UIKit/UIKit.h>
#import "ZXingWidgetController.h"
#import "QRCodeReader.h"
 
@interface RootViewController : UIViewController <ZXingDelegate>
{
    UITextField *results;
}
 
@property (retain, nonatomic) IBOutlet UITextField *results;
 
- (IBAction)scanPressed:(id)sender;
 
@end

RootViewController.mm
scanPressed: 액션 메서드와 XZingDelegate 프로토콜 메서드를 구현한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
- (IBAction)scanPressed:(id)sender
{
    // QR코드 스캔 뷰 컨트롤러 선언
    ZXingWidgetController *controller = [[ZXingWidgetController alloc] initWithDelegate:self
                                                                             showCancel:YES
                                                                               OneDMode:NO];
     
    QRCodeReader *reader = [[QRCodeReader alloc] init];
    NSSet *readers= [[NSSet alloc] initWithObjects:reader, nil];
    [reader release];
     
    controller.readers = readers;
    [readers release];
     
    // 모달 뷰로 표시한다.
    [self presentModalViewController:controller animated:YES];
    [controller release];
}
 
#pragma mark - XZingDelegate
 
// QR코드 스캔 결과를 표시
- (void)zxingController:(ZXingWidgetController *)controller didScanResult:(NSString *)result
{
    NSLog(@"result : %@", result);
    self.results.text = result;   
    [self dismissModalViewControllerAnimated:NO];
}
 
// 스캔 취소
- (void)zxingControllerDidCancel:(ZXingWidgetController *)controller
{
    [self dismissModalViewControllerAnimated:YES];
}
 아웃렛과 액션 메서드를 닙 파일의 View에 연결한다.


ZXingTestAppDelegate.h
RootViewController 프로퍼티를 선언한다.
1
2
3
4
5
6
7
8
9
10
11
12
#import <UIKit/UIKit.h>
#import "RootViewController.h"
 
@interface ZXingTestAppDelegate : NSObject <UIApplicationDelegate>
{
    RootViewController *rootViewController;
}
 
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) RootViewController *rootViewController;
 
@end

ZXingTestAppDelegate.mm
RootViewController 객체를 생성해서 뷰로 추가한다.
1
2
3
4
5
6
7
8
9
10
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController"
                                                                   bundle:nil];
     
    [self.window addSubview:self.rootViewController.view];
    [self.window makeKeyAndVisible];
 
    return YES;
}

빌드하고 디바이스에서 실행한다.


출처 : http://sunsideup.tistory.com/85