Fixes to get zxing compatible back to OS 3.0 as proposed by David Oster.

git-svn-id: https://zxing.googlecode.com/svn/trunk@1349 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
dmaclach 2010-05-10 17:44:49 +00:00
parent 8af8dea749
commit 0ab1caee3e
2 changed files with 44 additions and 25 deletions

View file

@ -230,32 +230,39 @@ CGImageRef MyCGImageCopyScreenContents(void) {
// [[NSUserDefaults standardUserDefaults] boolForKey:@"allowEditing"];
BOOL isCamera = (sourceType == UIImagePickerControllerSourceTypeCamera);
picker.allowsEditing = !isCamera;
if ([picker respondsToSelector:@selector(setAllowsEditing:)]) {
// not in 3.0
[picker setAllowsEditing:!isCamera];
}
if (isCamera) {
picker.showsCameraControls = NO;
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
NSString *cancelString =
if ([picker respondsToSelector:@selector(setShowsCameraControls:)]) {
[picker setShowsCameraControls:NO];
UIButton *cancelButton =
[UIButton buttonWithType:UIButtonTypeRoundedRect];
NSString *cancelString =
NSLocalizedString(@"DecoderViewController cancel button title", @"");
CGFloat height = [UIFont systemFontSize];
CGSize size = [cancelString sizeWithFont:[UIFont systemFontOfSize:height]];
[cancelButton setTitle:cancelString forState:UIControlStateNormal];
CGRect appFrame = [[UIScreen mainScreen] bounds];
static const int kMargin = 10;
static const int kInternalXMargin = 10;
static const int kInternalYMargin = 10;
CGRect frame = CGRectMake(kMargin,
appFrame.size.height - (height + 2*kInternalYMargin + kMargin),
2*kInternalXMargin + size.width,
height + 2*kInternalYMargin);
[cancelButton setFrame:frame];
[cancelButton addTarget:self
action:@selector(cancel:)
forControlEvents:UIControlEventTouchUpInside];
picker.cameraOverlayView = cancelButton;
// The camera takes quite a while to start up. Hence the 2 second delay.
[self performSelector:@selector(takeScreenshot)
withObject:nil
afterDelay:2.0];
CGFloat height = [UIFont systemFontSize];
CGSize size =
[cancelString sizeWithFont:[UIFont systemFontOfSize:height]];
[cancelButton setTitle:cancelString forState:UIControlStateNormal];
CGRect appFrame = [[UIScreen mainScreen] bounds];
static const int kMargin = 10;
static const int kInternalXMargin = 10;
static const int kInternalYMargin = 10;
CGRect frame = CGRectMake(kMargin,
appFrame.size.height - (height + 2*kInternalYMargin + kMargin),
2*kInternalXMargin + size.width,
height + 2*kInternalYMargin);
[cancelButton setFrame:frame];
[cancelButton addTarget:self
action:@selector(cancel:)
forControlEvents:UIControlEventTouchUpInside];
picker.cameraOverlayView = cancelButton;
// The camera takes quite a while to start up. Hence the 2 second delay.
[self performSelector:@selector(takeScreenshot)
withObject:nil
afterDelay:2.0];
}
}
// Picker is displayed asynchronously.

View file

@ -48,7 +48,19 @@ static NSMutableSet *sResultParsers = nil;
#ifdef DEBUG
NSLog(@"parsing result:\n<<<\n%@\n>>>\n", s);
#endif
for (Class c in [self resultParsers]) {
// Make the parser of last resort the last parser we try.
NSMutableArray *resultParsers =
[NSMutableArray arrayWithArray:[[self resultParsers] allObjects]];
NSUInteger textIndex =
[resultParsers indexOfObject:NSClassFromString(@"TextResultParser")];
if (NSNotFound != textIndex) {
// If it is present, make sure it is last.
[resultParsers exchangeObjectAtIndex:textIndex
withObjectAtIndex:[resultParsers count] - 1];
}
for (Class c in resultParsers) {
#ifdef DEBUG
NSLog(@"trying %@", NSStringFromClass(c));
#endif