UI improvements

git-svn-id: https://zxing.googlecode.com/svn/trunk@495 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
christian.brunschen 2008-07-02 14:22:23 +00:00
parent 64369b3878
commit b3c6b48e11
20 changed files with 649 additions and 396 deletions

View file

@ -52,8 +52,7 @@
return NSLocalizedString(@"Add Contact", @"Add Contact");
}
- (void)performActionWithController:(UIViewController *)controller
shouldConfirm:(bool)confirm {
- (void) addContactWithController:(UIViewController *)controller {
CFErrorRef *error = NULL;
NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];
@ -133,6 +132,36 @@
[unknownPersonViewController release];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex != [alertView cancelButtonIndex]) {
// perform the action
[self addContactWithController:viewController];
}
}
#ifdef CONFIRM_ADDING_CONTACT
#undef CONFIRM_ADDING_CONTACT
#endif
- (void)performActionWithController:(UIViewController *)controller
shouldConfirm:(bool)confirm {
#ifdef CONFIRM_ADDING_CONTACT
if (confirm) {
viewController = controller;
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil
message:NSLocalizedString(@"Add Contact?", @"add contact")
delegate:self
cancelButtonTitle:NSLocalizedString(@"Cancel", @"cancel button title")
otherButtonTitles:NSLocalizedString(@"Add Contact", @"add contact"), nil];
[alertView show];
[alertView release];
} else {
#endif
[self addContactWithController:controller];
#ifdef CONFIRM_ADDING_CONTACT
}
#endif
}
- (void)dismissUnknownPersonViewController:(ABUnknownPersonViewController *)unknownPersonViewController {
[[viewController navigationController] popToViewController:viewController animated:YES];
[viewController release];

View file

@ -26,15 +26,7 @@
#import "ParsedResult.h"
#import "DecoderViewController.h"
#import "ScanViewController.h"
#define IMAGE_VIEW_TAG 0x17
#define DATE_VIEW_TAG 0x18
#define TEXT_VIEW_TAG 0x19
#define VIEW_PADDING 2
#define IMAGE_VIEW_SIDE 40
#define CONTENT_HEIGHT IMAGE_VIEW_SIDE
#define DATE_VIEW_WIDTH 50
#import "ScanCell.h"
@implementation ArchiveController
@ -62,74 +54,21 @@
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return IMAGE_VIEW_SIDE + 2 * VIEW_PADDING;
return 44.0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *ScanIdentifier = @"ScanIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ScanIdentifier];
ScanCell *cell = (ScanCell *)[tableView dequeueReusableCellWithIdentifier:ScanIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:ScanIdentifier] autorelease];
// clean out all existing subviews
NSArray *subviews = [[NSArray alloc] initWithArray:cell.contentView.subviews];
for (UIView *subview in subviews) {
[subview removeFromSuperview];
}
[subviews release];
float cellWidth = cell.contentView.bounds.size.width;
// add the views
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(VIEW_PADDING, VIEW_PADDING, IMAGE_VIEW_SIDE, CONTENT_HEIGHT)];
[imageView setTag:IMAGE_VIEW_TAG];
[imageView setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];
[imageView setContentMode:UIViewContentModeCenter];
[cell.contentView addSubview:imageView];
[imageView release];
UILabel *textView = [[UILabel alloc] initWithFrame:CGRectMake(2*VIEW_PADDING + IMAGE_VIEW_SIDE, VIEW_PADDING, cellWidth - 4*VIEW_PADDING - IMAGE_VIEW_SIDE - DATE_VIEW_WIDTH, CONTENT_HEIGHT)];
[textView setTag:TEXT_VIEW_TAG];
[textView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[cell.contentView addSubview:textView];
[textView release];
UITextView *dateView = [[UITextView alloc] initWithFrame:CGRectMake(cellWidth - VIEW_PADDING - DATE_VIEW_WIDTH, VIEW_PADDING, DATE_VIEW_WIDTH, CONTENT_HEIGHT)];
[dateView setTag:DATE_VIEW_TAG];
[dateView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin];
dateView.font = [UIFont systemFontOfSize:9.0];
dateView.textColor = [UIColor grayColor];
dateView.textAlignment = UITextAlignmentRight;
dateView.editable = NO;
[cell.contentView addSubview:dateView];
[dateView release];
cell = [[[ScanCell alloc] initWithFrame:CGRectZero reuseIdentifier:ScanIdentifier] autorelease];
}
UIImageView *imageView = (UIImageView *)[cell.contentView viewWithTag:IMAGE_VIEW_TAG];
UILabel *textView = (UILabel *)[cell.contentView viewWithTag:TEXT_VIEW_TAG];
UITextView *dateView = (UITextView *)[cell.contentView viewWithTag:DATE_VIEW_TAG];
// Configure the cell
int index = [self scanIndexForRow:indexPath.row];
Scan *scan = [scans objectAtIndex:index];
ParsedResult *result = [results objectAtIndex:index];
imageView.image = nil;
NSDate *stamp = [scan stamp];
NSTimeInterval interval = -[stamp timeIntervalSinceNow];
if (interval < 24 * 3600) { // last 24 hours
[dateFormatter setDateStyle:NSDateFormatterNoStyle];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
} else if (interval < 30 * 24 * 3600) { // last 30 days
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
} else {
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
}
dateView.text = [dateFormatter stringFromDate:[scan stamp]];
[dateView sizeToFit];
textView.text = [result stringForDisplay];
imageView.image = [result icon];
[cell setScan:scan];
return cell;
}

View file

@ -59,13 +59,14 @@ using namespace qrcode;
[self.delegate decoder:self failedToDecodeImage:self.image usingSubset:self.subsetImage reason:reason];
}
#define SUBSET_SIZE 320.0
- (void) prepareSubset {
CGImageRef cgImage = self.image.CGImage;
CGSize size = CGSizeMake(CGImageGetWidth(cgImage), CGImageGetHeight(cgImage));
#ifdef DEBUG
NSLog(@"decoding: image is (%.1f x %.1f)", size.width, size.height);
#endif
float scale = min(1.0f, max(0.25f, (float)max(400.0f / size.width, 400.0f / size.height)));
float scale = fminf(1.0f, fmaxf(SUBSET_SIZE / size.width, SUBSET_SIZE / size.height));
subsetWidth = size.width * scale;
subsetHeight = size.height * scale;

View file

@ -22,6 +22,7 @@
#import <UIKit/UIKit.h>
#import "Decoder.h"
#import "DecoderDelegate.h"
#import "ScannedImageView.h"
@class ParsedResult;
@class Scan;
@ -37,13 +38,14 @@
IBOutlet UIBarItem *actionBarItem;
IBOutlet UITextView *messageView;
IBOutlet UIView *resultView;
IBOutlet UIImageView *imageView;
IBOutlet ScannedImageView *imageView;
IBOutlet UIToolbar *toolbar;
Decoder *decoder;
ParsedResult *result;
NSArray *actions;
NSMutableArray *resultPointViews;
}
@property (nonatomic, retain) UIBarItem *cameraBarItem;
@ -53,14 +55,15 @@
@property (nonatomic, retain) UIBarItem *actionBarItem;
@property (nonatomic, retain) UITextView *messageView;
@property (nonatomic, retain) UIView *resultView;
@property (nonatomic, retain) UIImageView *imageView;
@property (nonatomic, retain) ScannedImageView *imageView;
@property (nonatomic, retain) UIToolbar *toolbar;
@property (nonatomic, retain) Decoder *decoder;
@property (nonatomic, retain) ParsedResult *result;
@property (nonatomic, retain) NSArray *actions;
@property (nonatomic, retain) NSMutableArray *resultPointViews;
- (void)updateToolbar;
- (void)pickAndDecodeFromSource:(UIImagePickerControllerSourceType) sourceType;
- (IBAction)pickAndDecode:(id)sender;

View file

@ -41,7 +41,6 @@
@synthesize actionBarItem;
@synthesize messageView;
@synthesize resultView;
@synthesize imageView;
@synthesize toolbar;
@ -49,6 +48,8 @@
@synthesize result;
@synthesize actions;
@synthesize resultPointViews;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Initialization code
@ -58,31 +59,34 @@
self.decoder = d;
d.delegate = self;
[d release];
resultPointViews = [[NSMutableArray alloc] init];
}
return self;
}
#define FONT_NAME @"TimesNewRomanPSMT"
#define FONT_SIZE 16.0
// Implement loadView if you want to create a view hierarchy programmatically
- (void)loadView {
[super loadView];
CGRect mViewFrame = self.resultView.bounds;
UITextView *mView = [[UITextView alloc] initWithFrame:mViewFrame];
mView.backgroundColor = [UIColor yellowColor];
mView.alpha = 0.95;
CGRect messageViewFrame = imageView.frame;
UITextView *mView = [[UITextView alloc] initWithFrame:messageViewFrame];
mView.backgroundColor = [UIColor darkGrayColor];
mView.alpha = 0.9;
mView.editable = false;
mView.scrollEnabled = true;
mView.font = [UIFont fontWithName:FONT_NAME size:FONT_SIZE];
mView.autoresizingMask = UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleBottomMargin;
UIViewAutoresizingFlexibleTopMargin;
mView.textColor = [UIColor whiteColor];
mView.textAlignment = UITextAlignmentLeft;
self.messageView = mView;
[mView release];
[self.resultView addSubview:self.messageView];
[self.view addSubview:self.messageView];
[self updateToolbar];
[self showMessage:NSLocalizedString(@"Please take or choose a picture containing a barcode", @"")];
}
@ -104,11 +108,10 @@
- (void)clearImageView {
imageView.image = nil;
NSArray *subviews = [imageView.subviews copy];
for (UIView *view in subviews) {
for (UIView *view in resultPointViews) {
[view removeFromSuperview];
}
[subviews release];
[resultPointViews removeAllObjects];
}
- (void)pickAndDecodeFromSource:(UIImagePickerControllerSourceType) sourceType {
@ -119,8 +122,7 @@
UIImagePickerController* picker = [[UIImagePickerController alloc] init];
picker.sourceType = sourceType;
picker.delegate = self;
picker.allowsImageEditing = [[NSUserDefaults standardUserDefaults]
boolForKey:@"allowEditing"];
picker.allowsImageEditing = YES; // [[NSUserDefaults standardUserDefaults] boolForKey:@"allowEditing"];
// Picker is displayed asynchronously.
[self presentModalViewController:picker animated:YES];
@ -154,7 +156,6 @@
// Release anything that's not essential, such as cached data
}
- (void)dealloc {
[decoder release];
[self clearImageView];
@ -165,6 +166,8 @@
[savedPhotosBarItem release];
[archiveBarItem release];
[toolbar release];
[actions dealloc];
[resultPointViews dealloc];
[super dealloc];
}
@ -173,8 +176,16 @@
#ifdef DEBUG
NSLog(@"Showing message '%@'", message);
#endif
CGSize maxSize = imageView.bounds.size;
CGSize size = [message sizeWithFont:messageView.font constrainedToSize:maxSize lineBreakMode:UILineBreakModeWordWrap];
float height = 20.0 + fmin(100.0, size.height);
CGRect messageFrame = imageView.bounds;
messageFrame.origin.y = CGRectGetMaxY(messageFrame) - height;
messageFrame.size.height = height;
self.messageView.text = message;
[self.messageView sizeToFit];
[self.messageView setFrame:messageFrame];
}
// DecoderDelegate methods
@ -207,33 +218,10 @@
- (void)presentResultPoints:(NSArray *)resultPoints
forImage:(UIImage *)image
usingSubset:(UIImage *)subset {
// CGSize imageSize = image.size;
CGSize subsetSize = subset.size;
CGRect viewBounds = imageView.bounds;
float scale = fmin(viewBounds.size.width / subsetSize.width,
viewBounds.size.height / subsetSize.height);
float xOffset = (viewBounds.size.width - scale * subsetSize.width) / 2.0;
float yOffset = (viewBounds.size.height - scale * subsetSize.height) / 2.0;
NSLog(@"(%f, %f) image in view with bounds (%f, %f) x (%f, %f)",
subsetSize.width, subsetSize.height,
viewBounds.origin.x, viewBounds.origin.y,
viewBounds.size.width, viewBounds.size.height);
NSLog(@"xOffset = %f, yOffset = %f, scale = %f", xOffset, yOffset, scale);
// simply add the points to the image view
imageView.image = subset;
for (NSValue *pointValue in resultPoints) {
CGPoint point = [pointValue CGPointValue];
float x = xOffset + scale * point.x;
float y = yOffset + scale * point.y;
NSLog(@"have result point @ (%f, %f), imageView point (%f, %f)", point.x, point.y, x, y);
CGRect frame = CGRectMake(x - 3, y - 3, 7, 7);
UIView *pointView = [[UIView alloc] initWithFrame:frame];
pointView.opaque = YES;
pointView.backgroundColor = [UIColor greenColor];
pointView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[imageView addSubview:pointView];
[pointView release];
[imageView addResultPoint:[pointValue CGPointValue]];
}
}
@ -254,6 +242,44 @@
}
- (void)willAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willAnimateFirstHalfOfRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
if (imageView.image) {
/*
CGRect viewBounds = imageView.bounds;
CGSize imageSize = imageView.image.size;
float scale = fmin(viewBounds.size.width / imageSize.width,
viewBounds.size.height / imageSize.height);
float xOffset = (viewBounds.size.width - scale * imageSize.width) / 2.0;
float yOffset = (viewBounds.size.height - scale * imageSize.height) / 2.0;
*/
for (UIView *view in resultPointViews) {
view.alpha = 0.0;
}
}
}
- (void)willAnimateSecondHalfOfRotationFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation duration:(NSTimeInterval)duration {
[super willAnimateSecondHalfOfRotationFromInterfaceOrientation:fromInterfaceOrientation duration:duration];
if (imageView.image) {
/*
CGRect viewBounds = imageView.bounds;
CGSize imageSize = imageView.image.size;
float scale = fmin(viewBounds.size.width / imageSize.width,
viewBounds.size.height / imageSize.height);
float xOffset = (viewBounds.size.width - scale * imageSize.width) / 2.0;
float yOffset = (viewBounds.size.height - scale * imageSize.height) / 2.0;
*/
for (UIView *view in resultPointViews) {
view.alpha = 1.0;
}
}
}
// UIImagePickerControllerDelegate methods
- (void)imagePickerController:(UIImagePickerController *)picker

View file

@ -21,15 +21,23 @@
#import "SMSAction.h"
// currently, including a message body makes the iPhone not actually
// go to compose an SMS at all, just start the SMS app. Bummer.
#ifdef SMS_URL_INCLUDE_BODY
#undef SMS_URL_INCLUDE_BODY
#endif
@implementation SMSAction
@synthesize body;
+ (NSURL *)urlForNumber:(NSString *)number withBody:(NSString *)body {
NSString *urlString = body ?
[NSString stringWithFormat:@"sms:%@?body=%@", number, [body stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] :
[NSString stringWithFormat:@"sms:%@", number];
NSString *urlString =
#ifdef SMS_URL_INCLUDE_BODY
(body && [body length]) ?
[NSString stringWithFormat:@"sms:%@?body=%@", number, [body stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] :
#endif
[NSString stringWithFormat:@"sms:%@", number];
return [NSURL URLWithString:urlString];
}

29
iphone/Classes/ScanCell.h Normal file
View file

@ -0,0 +1,29 @@
//
// ScanCell.h
// ZXing
//
// Created by Christian Brunschen on 30/06/2008.
// Copyright 2008 Google Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
@class Scan;
@class ParsedResult;
@interface ScanCell : UITableViewCell {
Scan *scan;
ParsedResult *result;
UIImageView *imageView;
UILabel *textView;
UILabel *dateView;
UILabel *timeView;
}
@property (nonatomic, retain) Scan *scan;
@property (nonatomic, retain) UIImageView *imageView;
@property (nonatomic, retain) UILabel *textView;
@property (nonatomic, retain) UILabel *dateView;
@property (nonatomic, retain) UILabel *timeView;
@end

162
iphone/Classes/ScanCell.m Normal file
View file

@ -0,0 +1,162 @@
//
// ScanCell.m
// ZXing
//
// Created by Christian Brunschen on 30/06/2008.
// Copyright 2008 Google Inc. All rights reserved.
//
#import "ScanCell.h"
#import "Scan.h"
#import "ParsedResult.h"
#import "ResultParser.h"
static NSDateFormatter *_makeDateFormatter(NSDateFormatterStyle dateStyle,
NSDateFormatterStyle timeStyle) {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:dateStyle];
[dateFormatter setTimeStyle:timeStyle];
return dateFormatter;
}
static NSString *_dateString(NSDate *date) {
static NSDateFormatter *dateFormatter = nil;
if (!dateFormatter) {
dateFormatter =
_makeDateFormatter(NSDateFormatterShortStyle, NSDateFormatterNoStyle);
}
return [dateFormatter stringFromDate:date];
}
static NSString *_timeString(NSDate *date) {
static NSDateFormatter *timeFormatter = nil;
if (!timeFormatter) {
timeFormatter =
_makeDateFormatter(NSDateFormatterNoStyle, NSDateFormatterShortStyle);
}
return [timeFormatter stringFromDate:date];
}
#define VIEW_PADDING 2.0
#define IMAGE_SIZE 40.0
#define EDITING_INSET 10.0
#define CONTENT_HEIGHT (IMAGE_SIZE + 2.0 * VIEW_PADDING)
#define DATE_TIME_WIDTH 50.0
@implementation ScanCell
@synthesize imageView;
@synthesize textView;
@synthesize dateView;
@synthesize timeView;
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
imageView = [[UIImageView alloc] initWithFrame:CGRectZero];
imageView.contentMode = UIViewContentModeCenter;
[self.contentView addSubview:imageView];
textView = [[UILabel alloc] initWithFrame:CGRectZero];
textView.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
textView.textAlignment = UITextAlignmentLeft;
textView.textColor = [UIColor blackColor];
[self.contentView addSubview:textView];
dateView = [[UILabel alloc] initWithFrame:CGRectZero];
dateView.font = [UIFont systemFontOfSize:(2 * [UIFont systemFontSize]) / 3];
dateView.textAlignment = UITextAlignmentRight;
dateView.textColor = [UIColor grayColor];
[self.contentView addSubview:dateView];
timeView = [[UILabel alloc] initWithFrame:CGRectZero];
timeView.font = [UIFont systemFontOfSize:(2 * [UIFont systemFontSize]) / 3];
timeView.textAlignment = UITextAlignmentRight;
timeView.textColor = [UIColor grayColor];
[self.contentView addSubview:timeView];
}
return self;
}
- (CGRect) _imageViewFrame {
CGRect frame = CGRectMake(VIEW_PADDING, VIEW_PADDING, IMAGE_SIZE, IMAGE_SIZE);
if (self.editing) {
frame.origin.x += EDITING_INSET;
}
return frame;
}
- (CGRect) _textViewFrame {
CGRect frame = CGRectMake(2 * VIEW_PADDING + IMAGE_SIZE, VIEW_PADDING, self.contentView.bounds.size.width - IMAGE_SIZE - DATE_TIME_WIDTH - 3 * VIEW_PADDING, CONTENT_HEIGHT - 2 * VIEW_PADDING);
if (self.editing) {
frame.origin.x += EDITING_INSET;
frame.size.width += DATE_TIME_WIDTH + VIEW_PADDING - EDITING_INSET;
}
return frame;
}
- (CGRect) _timeViewFrame {
float x = CGRectGetMaxX(self.contentView.bounds) - DATE_TIME_WIDTH - VIEW_PADDING;
CGRect frame = CGRectMake(x, VIEW_PADDING, DATE_TIME_WIDTH, (CONTENT_HEIGHT - 2 * VIEW_PADDING) / 2);
return frame;
}
- (CGRect) _dateViewFrame {
float x = CGRectGetMaxX(self.contentView.bounds) - DATE_TIME_WIDTH - VIEW_PADDING;
CGRect frame = CGRectMake(x, (CONTENT_HEIGHT - 2 * VIEW_PADDING) / 2, DATE_TIME_WIDTH, (CONTENT_HEIGHT - 2 * VIEW_PADDING) / 2);
return frame;
}
- (void)layoutSubviews {
[super layoutSubviews];
[imageView setFrame:[self _imageViewFrame]];
[textView setFrame:[self _textViewFrame]];
[dateView setFrame:[self _dateViewFrame]];
[timeView setFrame:[self _timeViewFrame]];
if (self.editing) {
dateView.alpha = 0.0;
timeView.alpha = 0.0;
} else {
dateView.alpha = 1.0;
timeView.alpha = 1.0;
}
}
- (void)setScan:(Scan *)newScan {
if (newScan != scan) {
[newScan retain];
[scan release];
scan = newScan;
[result release];
result = [[ResultParser parsedResultForString:[scan text]] retain];
imageView.image = [result icon];
textView.text = [result stringForDisplay];
NSDate *date = [scan stamp];
dateView.text = _dateString(date);
timeView.text = _timeString(date);
}
}
- (Scan *)scan {
return scan;
}
- (void)dealloc {
[imageView release];
[textView release];
[dateView release];
[timeView release];
[scan release];
[result release];
[super dealloc];
}
@end

View file

@ -14,10 +14,12 @@
IBOutlet ParsedResult *result;
IBOutlet Scan *scan;
UIFont *bodyFont;
NSDateFormatter *dateFormatter;
}
@property (nonatomic, retain) ParsedResult *result;
@property (nonatomic, retain) Scan *scan;
@property (nonatomic, retain) NSDateFormatter *dateFormatter;
- (id)initWithResult:(ParsedResult *)r forScan:(Scan *)s;

View file

@ -11,7 +11,8 @@
#define TEXT_VIEW_TAG 0x17
#define BUTTON_LABEL_TAG 0x17
#define DATETIME_VIEW_TAG 0x18
#define BUTTON_LABEL_TAG 0x19
#define TITLE_HEIGHT 44
#define BODY_HEIGHT 88
@ -19,6 +20,7 @@
@synthesize result;
@synthesize scan;
@synthesize dateFormatter;
#define FONT_NAME @"TimesNewRomanPSMT"
#define FONT_SIZE 16
@ -28,6 +30,9 @@
self.result = r;
self.scan = s;
self.title = NSLocalizedString(@"Scan", @"scan view controller title");
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
bodyFont = [[UIFont fontWithName:FONT_NAME size:FONT_SIZE] retain];
}
return self;
@ -42,7 +47,7 @@
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
switch (section) {
case 0:
return 2;
return 3;
case 1:
return [[result actions] count];
default:
@ -63,6 +68,18 @@
return [self cellWithIdentifier:TitleIdentifier inTableView:tableView];
}
- (UITableViewCell *)datetimeCellInTableView:(UITableView *)tableView {
static NSString *DatetimeIdentifier = @"ScanViewDatetimeIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:DatetimeIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, 320, 34) reuseIdentifier:DatetimeIdentifier] autorelease];
cell.font = [UIFont systemFontOfSize:[UIFont systemFontSize] * 2.0 / 3.0];
cell.textColor = [UIColor grayColor];
cell.textAlignment = UITextAlignmentCenter;
}
return cell;
}
- (UITableViewCell *)bodyCellInTableView:(UITableView *)tableView {
static NSString *BodyIdentifier = @"ScanViewBodyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:BodyIdentifier];
@ -97,23 +114,26 @@
return cell;
}
#define TEXT_VIEW_HEIGHT 330.0
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0) {
if (indexPath.row == 0) {
return TITLE_HEIGHT;
} else if (indexPath.row == 1) {
CGSize size = [[result stringForDisplay] sizeWithFont:bodyFont constrainedToSize:CGSizeMake(280.0, 200.0) lineBreakMode:UILineBreakModeWordWrap];
CGSize size = [[result stringForDisplay] sizeWithFont:bodyFont constrainedToSize:CGSizeMake(280.0, TEXT_VIEW_HEIGHT) lineBreakMode:UILineBreakModeWordWrap];
#ifdef DEBUG
NSLog(@"text size = %f", size.height);
#endif
return fminf(200, fmaxf(44, size.height + 24));
return fminf(TEXT_VIEW_HEIGHT, fmaxf(44, size.height + 24));
} else if (indexPath.row == 2) {
return 24.0;
}
}
return tableView.rowHeight;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell;
if (indexPath.section == 0) {
@ -125,6 +145,9 @@
cell = [self bodyCellInTableView:tableView];
UITextView *textView = (UITextView *)[cell viewWithTag:TEXT_VIEW_TAG];
textView.text = [result stringForDisplay];
} else if (indexPath.row == 2) {
cell = [self datetimeCellInTableView:tableView];
cell.text = [dateFormatter stringFromDate:[scan stamp]];
}
} else if (indexPath.section == 1) {
cell = [self buttonCellInTableView:tableView];
@ -182,6 +205,7 @@
[result release];
[scan release];
[bodyFont release];
[dateFormatter release];
[super dealloc];
}

View file

@ -0,0 +1,21 @@
//
// ScannedImageView.h
// ZXing
//
// Created by Christian Brunschen on 01/07/2008.
// Copyright 2008 Google Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ScannedImageView : UIView {
UIImage *image;
NSMutableArray *resultPoints;
}
@property (nonatomic, retain) UIImage *image;
- (void) addResultPoint:(CGPoint)p;
@end

View file

@ -0,0 +1,105 @@
//
// ScannedImageView.m
// ZXing
//
// Created by Christian Brunschen on 01/07/2008.
// Copyright 2008 Google Inc. All rights reserved.
//
#import "ScannedImageView.h"
#import <math.h>
@implementation ScannedImageView
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
resultPoints = [[NSMutableArray alloc] initWithCapacity:10];
}
return self;
}
- (id)initWithCoder:(NSCoder *)decoder {
if ((self = [super initWithCoder:decoder]) != nil) {
resultPoints = [[NSMutableArray alloc] initWithCapacity:10];
}
return self;
}
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
if (image) {
// draw the image, scaled to fit, top and center
CGSize imageSize = image.size;
CGRect bounds = [self bounds];
double imageScale = fminf(bounds.size.width / imageSize.width,
bounds.size.height / imageSize.height);
double dx = (bounds.size.width - imageSize.width * imageScale) / 2.0;
double dy = 0.0;
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(ctx, kCGInterpolationDefault);
CGRect imageRect = CGRectMake(dx, dy,
imageSize.width * imageScale,
imageSize.height * imageScale);
[image drawInRect:imageRect];
[[UIColor greenColor] set];
if (resultPoints && [resultPoints count]) {
#define R 4.0
if ([resultPoints count] == 2) {
CGPoint p0 = [[resultPoints objectAtIndex:0] CGPointValue];
CGPoint p1 = [[resultPoints objectAtIndex:1] CGPointValue];
CGContextMoveToPoint(ctx, dx + p0.x * imageScale, dy + p0.y * imageScale);
CGContextAddLineToPoint(ctx, dx + p1.x * imageScale, dy + p1.y * imageScale);
CGContextSetLineWidth(ctx, 4.0);
CGContextSetLineCap(ctx, kCGLineCapSquare);
CGContextStrokePath(ctx);
} else {
// for each resultPoint, draw it
for (NSValue *pointValue in resultPoints) {
CGPoint resultPoint = [pointValue CGPointValue];
float px = dx + resultPoint.x * imageScale;
float py = dy + resultPoint.y * imageScale;
CGContextAddRect(ctx,
CGRectMake(px - R, py - R, 2 * R, 2 * R));
}
CGContextFillPath(ctx);
}
CGContextFlush(ctx);
#undef R
}
}
}
- (void) addResultPoint:(CGPoint)p {
[resultPoints addObject:[NSValue valueWithCGPoint:p]];
[self setNeedsDisplay];
}
- (void) clearResultPoints {
[resultPoints removeAllObjects];
}
- (void) setImage:(UIImage *)newImage {
[newImage retain];
[image release];
image = newImage;
[self clearResultPoints];
[self setNeedsDisplay];
}
- (UIImage *)image {
return image;
}
- (void)dealloc {
[image release];
[resultPoints release];
[super dealloc];
}
@end

View file

@ -31,14 +31,6 @@
@synthesize navigationController;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
for (NSString *familyName in [UIFont familyNames]) {
NSLog(@"family name: '%@'", familyName);
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@" font name: '%@'", fontName);
}
}
/* create the view controller */
DecoderViewController *vc =
[[DecoderViewController alloc] initWithNibName:@"DecoderView"
@ -55,23 +47,21 @@
// show the window
[window makeKeyAndVisible];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"autoChoosePicture"]) {
// pick and decode using the first available source type in priority order
// pick and decode using the first available source type in priority order
#define N_SOURCE_TYPES 3
UIImagePickerControllerSourceType sourceTypes[N_SOURCE_TYPES] = {
UIImagePickerControllerSourceTypeCamera,
UIImagePickerControllerSourceTypeSavedPhotosAlbum,
UIImagePickerControllerSourceTypePhotoLibrary
};
UIImagePickerControllerSourceType sourceTypes[N_SOURCE_TYPES] = {
UIImagePickerControllerSourceTypeCamera,
UIImagePickerControllerSourceTypeSavedPhotosAlbum,
UIImagePickerControllerSourceTypePhotoLibrary
};
for (int i = 0; i < N_SOURCE_TYPES; i++) {
if ([UIImagePickerController isSourceTypeAvailable:sourceTypes[i]]) {
[viewController pickAndDecodeFromSource:sourceTypes[i]];
break;
}
for (int i = 0; i < N_SOURCE_TYPES; i++) {
if ([UIImagePickerController isSourceTypeAvailable:sourceTypes[i]]) {
[viewController pickAndDecodeFromSource:sourceTypes[i]];
break;
}
#undef N_SOURCE_TYPES
}
#undef N_SOURCE_TYPES
}
- (void)dealloc {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -1,45 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Title</key>
<string>YOUR_PROJECT_NAME</string>
<key>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Title</key>
<string>Automatic Actions</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>Take Picture</string>
<key>Key</key>
<string>autoChoosePicture</string>
<key>DefaultValue</key>
<true/>
</dict>
<dict>
<key>Title</key>
<string>Taking Pictures</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>Allow Editing</string>
<key>Key</key>
<string>allowEditing</string>
<key>DefaultValue</key>
<true/>
</dict>
</array>
</dict>
</plist>

View file

@ -61,7 +61,6 @@
852A99910E0BC43C003E6D6D /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 852A99900E0BC43C003E6D6D /* MainWindow.xib */; };
852A99970E0BC49E003E6D6D /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 852A99960E0BC49E003E6D6D /* Localizable.strings */; };
854BE3010E06A56C00CB4A20 /* AddressBookUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 854BE3000E06A56C00CB4A20 /* AddressBookUI.framework */; };
8552C4980E0A61D6000CC4F0 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 8552C4970E0A61D6000CC4F0 /* Default.png */; };
855A66800DF5E757007B394F /* ArchiveController.m in Sources */ = {isa = PBXBuildFile; fileRef = 855A66510DF5E757007B394F /* ArchiveController.m */; };
855A66810DF5E757007B394F /* Database.m in Sources */ = {isa = PBXBuildFile; fileRef = 855A66540DF5E757007B394F /* Database.m */; };
855A66830DF5E757007B394F /* AddContactAction.m in Sources */ = {isa = PBXBuildFile; fileRef = 855A66580DF5E757007B394F /* AddContactAction.m */; };
@ -81,12 +80,13 @@
855A66930DF5E757007B394F /* URIParsedResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 855A66790DF5E757007B394F /* URIParsedResult.m */; };
855A66960DF5E757007B394F /* Scan.m in Sources */ = {isa = PBXBuildFile; fileRef = 855A667F0DF5E757007B394F /* Scan.m */; };
855A66A50DF5E7B4007B394F /* scans.db in Resources */ = {isa = PBXBuildFile; fileRef = 855A66A00DF5E7B4007B394F /* scans.db */; };
855A66A60DF5E7B4007B394F /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 855A66A10DF5E7B4007B394F /* Settings.bundle */; };
855A66A70DF5E7B4007B394F /* zxing-icon-128.png in Resources */ = {isa = PBXBuildFile; fileRef = 855A66A20DF5E7B4007B394F /* zxing-icon-128.png */; };
855A66B40DF5E884007B394F /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 855A66B30DF5E884007B394F /* AddressBook.framework */; };
855A66BD0DF5E8D6007B394F /* libsqlite3.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 855A66BC0DF5E8D6007B394F /* libsqlite3.0.dylib */; };
855A66BF0DF5E8F8007B394F /* libiconv.2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 855A66BE0DF5E8F8007B394F /* libiconv.2.dylib */; };
855A66D20DF5E954007B394F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 855A66D10DF5E954007B394F /* CoreGraphics.framework */; };
85B1D7EF0E18EB6800514A6A /* ScanCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 85B1D7EE0E18EB6700514A6A /* ScanCell.m */; };
85B1D8850E190E3A00514A6A /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 85B1D8840E190E3A00514A6A /* Default.png */; };
85C0B9140E123AFC005EED58 /* ResultParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 85C0B9130E123AFC005EED58 /* ResultParser.m */; };
85C0B91A0E123BD2005EED58 /* DoCoMoResultParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 85C0B9190E123BD2005EED58 /* DoCoMoResultParser.m */; };
85C0B9220E123C93005EED58 /* MeCardParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 85C0B9210E123C93005EED58 /* MeCardParser.m */; };
@ -109,6 +109,7 @@
85C3CC3B0E119E1700A01C6A /* sms.png in Resources */ = {isa = PBXBuildFile; fileRef = 85C3CC330E119E1700A01C6A /* sms.png */; };
85C3CC3C0E119E1700A01C6A /* text.png in Resources */ = {isa = PBXBuildFile; fileRef = 85C3CC340E119E1700A01C6A /* text.png */; };
85D937270E11064700B785E0 /* ScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 85D937260E11064700B785E0 /* ScanViewController.m */; };
85E883980E1A34D2004C4547 /* ScannedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 85E883970E1A34D2004C4547 /* ScannedImageView.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -173,7 +174,6 @@
852A99D10E0BC8E8003E6D6D /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = "<group>"; };
852A99D20E0BC8E8003E6D6D /* sv */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = sv; path = sv.lproj/MainWindow.xib; sourceTree = "<group>"; };
854BE3000E06A56C00CB4A20 /* AddressBookUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBookUI.framework; path = System/Library/Frameworks/AddressBookUI.framework; sourceTree = SDKROOT; };
8552C4970E0A61D6000CC4F0 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
855A65D70DF5E739007B394F /* BarcodeFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BarcodeFormat.cpp; sourceTree = "<group>"; };
855A65D80DF5E739007B394F /* BarcodeFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BarcodeFormat.h; sourceTree = "<group>"; };
855A65D90DF5E739007B394F /* BlackPointEstimationMethod.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BlackPointEstimationMethod.cpp; sourceTree = "<group>"; };
@ -290,7 +290,6 @@
855A667E0DF5E757007B394F /* Scan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Scan.h; sourceTree = "<group>"; };
855A667F0DF5E757007B394F /* Scan.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Scan.m; sourceTree = "<group>"; };
855A66A00DF5E7B4007B394F /* scans.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = scans.db; sourceTree = "<group>"; };
855A66A10DF5E7B4007B394F /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
855A66A20DF5E7B4007B394F /* zxing-icon-128.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zxing-icon-128.png"; sourceTree = "<group>"; };
855A66B30DF5E884007B394F /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; };
855A66BC0DF5E8D6007B394F /* libsqlite3.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.0.dylib; path = usr/lib/libsqlite3.0.dylib; sourceTree = SDKROOT; };
@ -300,6 +299,9 @@
857D36400DF60E37000E0C89 /* Exception.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Exception.cpp; sourceTree = "<group>"; };
857D368E0DF613F3000E0C89 /* GrayBytesMonochromeBitmapSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrayBytesMonochromeBitmapSource.h; sourceTree = "<group>"; };
857D368F0DF613F3000E0C89 /* GrayBytesMonochromeBitmapSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GrayBytesMonochromeBitmapSource.cpp; sourceTree = "<group>"; };
85B1D7ED0E18EB6700514A6A /* ScanCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScanCell.h; sourceTree = "<group>"; };
85B1D7EE0E18EB6700514A6A /* ScanCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ScanCell.m; sourceTree = "<group>"; };
85B1D8840E190E3A00514A6A /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
85C0B9120E123AFC005EED58 /* ResultParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResultParser.h; sourceTree = "<group>"; };
85C0B9130E123AFC005EED58 /* ResultParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ResultParser.m; sourceTree = "<group>"; };
85C0B9180E123BD2005EED58 /* DoCoMoResultParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DoCoMoResultParser.h; sourceTree = "<group>"; };
@ -336,6 +338,8 @@
85C3CC340E119E1700A01C6A /* text.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = text.png; sourceTree = "<group>"; };
85D937250E11064700B785E0 /* ScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScanViewController.h; sourceTree = "<group>"; };
85D937260E11064700B785E0 /* ScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ScanViewController.m; sourceTree = "<group>"; };
85E883960E1A34D2004C4547 /* ScannedImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScannedImageView.h; sourceTree = "<group>"; };
85E883970E1A34D2004C4547 /* ScannedImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ScannedImageView.m; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
@ -376,6 +380,8 @@
85D937250E11064700B785E0 /* ScanViewController.h */,
85D937260E11064700B785E0 /* ScanViewController.m */,
855A66510DF5E757007B394F /* ArchiveController.m */,
85B1D7ED0E18EB6700514A6A /* ScanCell.h */,
85B1D7EE0E18EB6700514A6A /* ScanCell.m */,
855A66520DF5E757007B394F /* ArchiveController.h */,
855A66530DF5E757007B394F /* Database.h */,
855A66540DF5E757007B394F /* Database.m */,
@ -390,6 +396,8 @@
855A66770DF5E757007B394F /* NSString+HTML.m */,
855A667E0DF5E757007B394F /* Scan.h */,
855A667F0DF5E757007B394F /* Scan.m */,
85E883960E1A34D2004C4547 /* ScannedImageView.h */,
85E883970E1A34D2004C4547 /* ScannedImageView.m */,
);
path = Classes;
sourceTree = "<group>";
@ -429,15 +437,14 @@
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
85B1D8840E190E3A00514A6A /* Default.png */,
85C3CC0F0E119E0500A01C6A /* Images */,
852A99960E0BC49E003E6D6D /* Localizable.strings */,
855A66A00DF5E7B4007B394F /* scans.db */,
855A66A10DF5E7B4007B394F /* Settings.bundle */,
855A66A20DF5E7B4007B394F /* zxing-icon-128.png */,
852A998E0E0BC433003E6D6D /* DecoderView.xib */,
852A99900E0BC43C003E6D6D /* MainWindow.xib */,
8D1107310486CEB800E47090 /* Info.plist */,
8552C4970E0A61D6000CC4F0 /* Default.png */,
);
name = Resources;
sourceTree = "<group>";
@ -827,11 +834,9 @@
buildActionMask = 2147483647;
files = (
855A66A50DF5E7B4007B394F /* scans.db in Resources */,
855A66A60DF5E7B4007B394F /* Settings.bundle in Resources */,
855A66A70DF5E7B4007B394F /* zxing-icon-128.png in Resources */,
852A998F0E0BC433003E6D6D /* DecoderView.xib in Resources */,
852A99910E0BC43C003E6D6D /* MainWindow.xib in Resources */,
8552C4980E0A61D6000CC4F0 /* Default.png in Resources */,
852A99970E0BC49E003E6D6D /* Localizable.strings in Resources */,
85C3CC350E119E1700A01C6A /* business-card.png in Resources */,
85C3CC360E119E1700A01C6A /* email.png in Resources */,
@ -841,6 +846,7 @@
85C3CC3A0E119E1700A01C6A /* phone.png in Resources */,
85C3CC3B0E119E1700A01C6A /* sms.png in Resources */,
85C3CC3C0E119E1700A01C6A /* text.png in Resources */,
85B1D8850E190E3A00514A6A /* Default.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -888,6 +894,8 @@
85C0BC100E12548D005EED58 /* SMSTOResultParser.m in Sources */,
85C0BC140E1254C0005EED58 /* SMSParsedResult.m in Sources */,
85C0BC1C0E125842005EED58 /* SMSResultParser.m in Sources */,
85B1D7EF0E18EB6800514A6A /* ScanCell.m in Sources */,
85E883980E1A34D2004C4547 /* ScannedImageView.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View file

@ -3,12 +3,12 @@
<data>
<int key="IBDocument.SystemTarget">512</int>
<string key="IBDocument.SystemVersion">9D34</string>
<string key="IBDocument.InterfaceBuilderVersion">667</string>
<string key="IBDocument.InterfaceBuilderVersion">670</string>
<string key="IBDocument.AppKitVersion">949.33</string>
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="1"/>
<integer value="70"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -27,28 +27,6 @@
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBUIImageView" id="752226104">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{320, 431}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<int key="IBUIContentMode">1</int>
<bool key="IBUIUserInteractionEnabled">NO</bool>
</object>
<object class="IBUIView" id="167911890">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{0, 367}, {320, 64}}</string>
<reference key="NSSuperview" ref="191373211"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MSAwAA</bytes>
</object>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
</object>
<object class="IBUIToolbar" id="17982920">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">266</int>
@ -103,13 +81,22 @@
</object>
</object>
</object>
<object class="IBUIView" id="484684247">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{320, 431}</string>
<reference key="NSSuperview" ref="191373211"/>
<object class="NSColor" key="IBUIBackgroundColor" id="633901396">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MCAwIDAAA</bytes>
</object>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<int key="IBUIContentMode">3</int>
</object>
</object>
<string key="NSFrameSize">{320, 480}</string>
<reference key="NSSuperview"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MCAwIDAAA</bytes>
</object>
<reference key="IBUIBackgroundColor" ref="633901396"/>
<int key="IBUIContentMode">3</int>
</object>
</object>
@ -124,14 +111,6 @@
</object>
<int key="connectionID">9</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">imageView</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="752226104"/>
</object>
<int key="connectionID">18</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">actionBarItem</string>
@ -222,11 +201,11 @@
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">resultView</string>
<string key="label">imageView</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="167911890"/>
<reference key="destination" ref="484684247"/>
</object>
<int key="connectionID">69</int>
<int key="connectionID">71</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
@ -246,8 +225,7 @@
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="17982920"/>
<reference ref="167911890"/>
<reference ref="752226104"/>
<reference ref="484684247"/>
</object>
<reference key="parent" ref="360949347"/>
</object>
@ -325,17 +303,8 @@
<reference key="parent" ref="17982920"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">68</int>
<reference key="object" ref="167911890"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="parent" ref="191373211"/>
<string key="objectName">ResultView</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">16</int>
<reference key="object" ref="752226104"/>
<int key="objectID">70</int>
<reference key="object" ref="484684247"/>
<reference key="parent" ref="191373211"/>
</object>
</object>
@ -348,7 +317,6 @@
<string>-2.CustomClassName</string>
<string>1.IBEditorWindowLastContentRect</string>
<string>1.IBPluginDependency</string>
<string>16.IBPluginDependency</string>
<string>34.IBPluginDependency</string>
<string>35.IBPluginDependency</string>
<string>36.IBPluginDependency</string>
@ -359,14 +327,14 @@
<string>56.IBPluginDependency</string>
<string>58.IBPluginDependency</string>
<string>59.IBPluginDependency</string>
<string>68.IBPluginDependency</string>
<string>70.CustomClassName</string>
<string>70.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>DecodingController</string>
<string>DecoderViewController</string>
<string>UIResponder</string>
<string>{{387, 315}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>{{387, 352}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@ -378,6 +346,7 @@
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>ScannedImageView</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
</object>
@ -401,13 +370,13 @@
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">69</int>
<int key="maxID">71</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">DecodingController</string>
<string key="className">DecoderViewController</string>
<string key="superclassName">UIViewController</string>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -434,7 +403,6 @@
<string>imageView</string>
<string>libraryBarItem</string>
<string>messageView</string>
<string>resultView</string>
<string>savedPhotosBarItem</string>
<string>toolbar</string>
</object>
@ -443,31 +411,30 @@
<string>UIBarItem</string>
<string>UIBarItem</string>
<string>UIBarItem</string>
<string>UIImageView</string>
<string>ScannedImageView</string>
<string>UIBarItem</string>
<string>UITextView</string>
<string>UIView</string>
<string>UIBarItem</string>
<string>UIToolbar</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">Classes/DecodingController.h</string>
<string key="minorKey">Classes/DecoderViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">DecodingController</string>
<string key="superclassName">UIViewController</string>
<string key="className">ScannedImageView</string>
<string key="superclassName">UIView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">Classes/ScannedImageView.h</string>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.LastKnownRelativeProjectPath">ZXing.xcodeproj</string>
<string key="IBDocument.LastKnownRelativeProjectPath">../ZXing.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
</data>
</archive>

View file

@ -8,7 +8,7 @@
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="1"/>
<integer value="70"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -27,28 +27,6 @@
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBUIImageView" id="752226104">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{320, 431}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<int key="IBUIContentMode">1</int>
<bool key="IBUIUserInteractionEnabled">NO</bool>
</object>
<object class="IBUIView" id="167911890">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{0, 367}, {320, 64}}</string>
<reference key="NSSuperview" ref="191373211"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MSAwAA</bytes>
</object>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
</object>
<object class="IBUIToolbar" id="17982920">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">266</int>
@ -103,13 +81,22 @@
</object>
</object>
</object>
<object class="IBUIView" id="209438645">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{320, 431}</string>
<reference key="NSSuperview" ref="191373211"/>
<object class="NSColor" key="IBUIBackgroundColor" id="280346055">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MCAwIDAAA</bytes>
</object>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<int key="IBUIContentMode">3</int>
</object>
</object>
<string key="NSFrameSize">{320, 480}</string>
<reference key="NSSuperview"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MCAwIDAAA</bytes>
</object>
<reference key="IBUIBackgroundColor" ref="280346055"/>
<int key="IBUIContentMode">3</int>
</object>
</object>
@ -124,14 +111,6 @@
</object>
<int key="connectionID">9</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">imageView</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="752226104"/>
</object>
<int key="connectionID">18</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">actionBarItem</string>
@ -222,11 +201,11 @@
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">resultView</string>
<string key="label">imageView</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="167911890"/>
<reference key="destination" ref="209438645"/>
</object>
<int key="connectionID">69</int>
<int key="connectionID">71</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
@ -246,8 +225,7 @@
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="17982920"/>
<reference ref="167911890"/>
<reference ref="752226104"/>
<reference ref="209438645"/>
</object>
<reference key="parent" ref="360949347"/>
</object>
@ -325,17 +303,8 @@
<reference key="parent" ref="17982920"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">68</int>
<reference key="object" ref="167911890"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="parent" ref="191373211"/>
<string key="objectName">ResultView</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">16</int>
<reference key="object" ref="752226104"/>
<int key="objectID">70</int>
<reference key="object" ref="209438645"/>
<reference key="parent" ref="191373211"/>
</object>
</object>
@ -348,7 +317,6 @@
<string>-2.CustomClassName</string>
<string>1.IBEditorWindowLastContentRect</string>
<string>1.IBPluginDependency</string>
<string>16.IBPluginDependency</string>
<string>34.IBPluginDependency</string>
<string>35.IBPluginDependency</string>
<string>36.IBPluginDependency</string>
@ -359,14 +327,14 @@
<string>56.IBPluginDependency</string>
<string>58.IBPluginDependency</string>
<string>59.IBPluginDependency</string>
<string>68.IBPluginDependency</string>
<string>70.CustomClassName</string>
<string>70.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>DecodingController</string>
<string>DecoderViewController</string>
<string>UIResponder</string>
<string>{{387, 315}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>{{387, 352}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@ -378,6 +346,7 @@
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>ScannedImageView</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
</object>
@ -401,17 +370,65 @@
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">69</int>
<int key="maxID">71</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">DecodingController</string>
<string key="className">DecoderViewController</string>
<string key="superclassName">UIViewController</string>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>performResultAction:</string>
<string>pickAndDecode:</string>
<string>showArchive:</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>id</string>
<string>id</string>
<string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>actionBarItem</string>
<string>archiveBarItem</string>
<string>cameraBarItem</string>
<string>imageView</string>
<string>libraryBarItem</string>
<string>messageView</string>
<string>savedPhotosBarItem</string>
<string>toolbar</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>UIBarItem</string>
<string>UIBarItem</string>
<string>UIBarItem</string>
<string>ScannedImageView</string>
<string>UIBarItem</string>
<string>UITextView</string>
<string>UIBarItem</string>
<string>UIToolbar</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">Classes/DecoderViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">ScannedImageView</string>
<string key="superclassName">UIView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">Classes/ScannedImageView.h</string>
</object>
</object>
</object>

View file

@ -3,12 +3,12 @@
<data>
<int key="IBDocument.SystemTarget">512</int>
<string key="IBDocument.SystemVersion">9D34</string>
<string key="IBDocument.InterfaceBuilderVersion">667</string>
<string key="IBDocument.InterfaceBuilderVersion">670</string>
<string key="IBDocument.AppKitVersion">949.33</string>
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="1"/>
<integer value="70"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -27,28 +27,6 @@
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBUIImageView" id="752226104">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{320, 431}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<int key="IBUIContentMode">1</int>
<bool key="IBUIUserInteractionEnabled">NO</bool>
</object>
<object class="IBUIView" id="167911890">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{0, 367}, {320, 64}}</string>
<reference key="NSSuperview" ref="191373211"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MSAwAA</bytes>
</object>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
</object>
<object class="IBUIToolbar" id="17982920">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">266</int>
@ -103,13 +81,22 @@
</object>
</object>
</object>
<object class="IBUIView" id="680144344">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{320, 431}</string>
<reference key="NSSuperview" ref="191373211"/>
<object class="NSColor" key="IBUIBackgroundColor" id="139529231">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MCAwIDAAA</bytes>
</object>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<int key="IBUIContentMode">3</int>
</object>
</object>
<string key="NSFrameSize">{320, 480}</string>
<reference key="NSSuperview"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MCAwIDAAA</bytes>
</object>
<reference key="IBUIBackgroundColor" ref="139529231"/>
<int key="IBUIContentMode">3</int>
</object>
</object>
@ -124,14 +111,6 @@
</object>
<int key="connectionID">9</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">imageView</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="752226104"/>
</object>
<int key="connectionID">18</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">actionBarItem</string>
@ -222,11 +201,11 @@
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">resultView</string>
<string key="label">imageView</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="167911890"/>
<reference key="destination" ref="680144344"/>
</object>
<int key="connectionID">69</int>
<int key="connectionID">71</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
@ -246,8 +225,7 @@
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="17982920"/>
<reference ref="167911890"/>
<reference ref="752226104"/>
<reference ref="680144344"/>
</object>
<reference key="parent" ref="360949347"/>
</object>
@ -325,17 +303,8 @@
<reference key="parent" ref="17982920"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">68</int>
<reference key="object" ref="167911890"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="parent" ref="191373211"/>
<string key="objectName">ResultView</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">16</int>
<reference key="object" ref="752226104"/>
<int key="objectID">70</int>
<reference key="object" ref="680144344"/>
<reference key="parent" ref="191373211"/>
</object>
</object>
@ -348,7 +317,6 @@
<string>-2.CustomClassName</string>
<string>1.IBEditorWindowLastContentRect</string>
<string>1.IBPluginDependency</string>
<string>16.IBPluginDependency</string>
<string>34.IBPluginDependency</string>
<string>35.IBPluginDependency</string>
<string>36.IBPluginDependency</string>
@ -359,14 +327,14 @@
<string>56.IBPluginDependency</string>
<string>58.IBPluginDependency</string>
<string>59.IBPluginDependency</string>
<string>68.IBPluginDependency</string>
<string>70.CustomClassName</string>
<string>70.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>DecodingController</string>
<string>DecoderViewController</string>
<string>UIResponder</string>
<string>{{387, 315}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>{{387, 352}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@ -378,6 +346,7 @@
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>ScannedImageView</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
</object>
@ -401,13 +370,13 @@
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">69</int>
<int key="maxID">71</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">DecodingController</string>
<string key="className">DecoderViewController</string>
<string key="superclassName">UIViewController</string>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -434,7 +403,6 @@
<string>imageView</string>
<string>libraryBarItem</string>
<string>messageView</string>
<string>resultView</string>
<string>savedPhotosBarItem</string>
<string>toolbar</string>
</object>
@ -443,31 +411,30 @@
<string>UIBarItem</string>
<string>UIBarItem</string>
<string>UIBarItem</string>
<string>UIImageView</string>
<string>ScannedImageView</string>
<string>UIBarItem</string>
<string>UITextView</string>
<string>UIView</string>
<string>UIBarItem</string>
<string>UIToolbar</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">Classes/DecodingController.h</string>
<string key="minorKey">Classes/DecoderViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">DecodingController</string>
<string key="superclassName">UIViewController</string>
<string key="className">ScannedImageView</string>
<string key="superclassName">UIView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">Classes/ScannedImageView.h</string>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.LastKnownRelativeProjectPath">ZXing.xcodeproj</string>
<string key="IBDocument.LastKnownRelativeProjectPath">../ZXing.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
</data>
</archive>