基本信息
源码名称:iOS条形码二维码识别项目源码
源码大小:0.32M
文件格式:.zip
开发语言:C/C++
更新时间:2014-04-15
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
//
// BarcodeDecodeViewController.m
// Barcode
//
// Created by Stefan Hafeneger on 22.09.08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
#import "BarcodeDecodeViewController.h"
#import <AudioToolbox/AudioServices.h>
#import "BarcodeAppDelegate.h"
#import "ResultManager.h"
@interface BarcodeDecodeViewController ()
#pragma mark Properties
@property(nonatomic, retain) BarcodeEngine *barcodeEngine;
@property(nonatomic, retain) UIImage *image;
@property(nonatomic, retain) NSString *result;
@property(nonatomic, retain) UIImageView *imageView;
@property(nonatomic, getter=isActivity) BOOL activity;
@property(nonatomic, getter=isSaved) BOOL saved;
#pragma mark Private
- (void)updateInterface;
- (void)pickImageWithSourceType:(UIImagePickerControllerSourceType)sourceType;
@end
@implementation BarcodeDecodeViewController
#pragma mark Allocation
- (id)initWithBarcodeType:(BarcodeType)type {
self = [super initWithNibName:@"BarcodeDecodeViewController" bundle:nil];
if(self != nil) {
switch(type) {
case BarcodeTypeDataMatrix:
self.title = NSLocalizedString(@"DataMatrix", nil);
break;
case BarcodeTypeQRCode:
self.title = NSLocalizedString(@"QR Code", nil);
break;
}
self.barcodeEngine = [BarcodeEngine barcodeEngineWithBarcodeType:type];
self.barcodeEngine.delegate = self;
self.image = nil;
self.result = nil;
self.imageView = nil;
self.activity = NO;
self.saved = NO;
}
return self;
}
- (void)dealloc {
self.barcodeEngine = nil;
self.image = nil;
self.result = nil;
self.imageView = nil;
[super dealloc];
}
#pragma mark Properties;
@synthesize barcodeEngine = _barcodeEngine;
@synthesize image = _image;
@synthesize result = _result;
@synthesize imageView = _imageView;
@synthesize activity = _activity;
@synthesize saved = _saved;
#pragma mark Inherent
- (void)viewDidLoad {
// Clear text view.
textView.text = @"";
// Setup buttons and labels.
[buttonDecode setTitle:NSLocalizedString(@"Decode", nil) forState:UIControlStateNormal];
[buttonDecode setTitle:NSLocalizedString(@"Decode", nil) forState:UIControlStateHighlighted];
[buttonDecode setTitle:NSLocalizedString(@"Decode", nil) forState:UIControlStateDisabled];
activityLabel.text = NSLocalizedString(@"Decoding...", nil);
[buttonCancel setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateNormal];
[buttonCancel setTitle:NSLocalizedString(@"Cancel", nil) forState:UIControlStateHighlighted];
// Setup scrollView.
scrollView.delegate = self;
scrollView.indicatorStyle = UIScrollViewIndicatorStyleBlack;
scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(15.0f, 15.0f, 15.0f, 15.0f);
scrollView.bouncesZoom = YES;
// Update interface.
[self updateInterface];
}
#pragma mark Private
- (void)updateInterface {
if(self.isActivity) {
if(!self.navigationItem.hidesBackButton)
[self.navigationItem setHidesBackButton:YES animated:YES];
buttonDecode.enabled = NO;
buttonDecode.hidden = YES;
activityOverlayView.hidden = NO;
activityIndicatorView.hidden = NO;
if(![activityIndicatorView isAnimating])
[activityIndicatorView startAnimating];
activityLabel.hidden = NO;
buttonCancel.hidden = NO;
barButtonCamera.enabled = NO;
barButtonLibrary.enabled = NO;
barButtonOrganize.enabled = NO;
barButtonAction.enabled = NO;
} else {
if(self.navigationItem.hidesBackButton)
[self.navigationItem setHidesBackButton:NO animated:YES];
buttonDecode.enabled = (self.image != nil && !self.barcodeEngine.isRunning);
buttonDecode.hidden = NO;
activityOverlayView.hidden = YES;
activityIndicatorView.hidden = YES;
if([activityIndicatorView isAnimating])
[activityIndicatorView stopAnimating];
activityLabel.hidden = YES;
buttonCancel.hidden = YES;
barButtonCamera.enabled = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
barButtonLibrary.enabled = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary];
barButtonOrganize.enabled = (self.result != nil && !self.isSaved);
barButtonAction.enabled = (self.result != nil);
}
BarcodeAppDelegate *applicationDelegate = (BarcodeAppDelegate *)[UIApplication sharedApplication].delegate;
if(applicationDelegate.scheme != nil) {
barButtonOrganize.enabled = NO;
barButtonAction.enabled = NO;
}
}
- (void)pickImageWithSourceType:(UIImagePickerControllerSourceType)sourceType {
// Create new image picker controller.
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.allowsImageEditing = NO;
imagePickerController.delegate = self;
imagePickerController.sourceType = sourceType;
imagePickerController.navigationBar.barStyle = UIBarStyleBlackOpaque;
// Show the image picker.
[self.navigationController presentModalViewController:imagePickerController animated:YES];
}
#pragma mark IBAction
- (IBAction)decodeImage:(id)sender {
// Calculate scrollView scale factor.
CGPoint origin = scrollView.contentOffset;
CGSize size = scrollView.contentSize;
CGFloat scale = self.image.size.width / size.width;
// Calculate target area.
CGRect rect = CGRectMake((origin.x 60.0f) * scale, (origin.y 26.0f) * scale, 200.0f * scale, 200.0f * scale);
// Decode image.
[self.barcodeEngine decodeImage:self.image withRect:rect];
}
- (IBAction)cancelDecode:(id)sender {
[self.barcodeEngine cancelOperation];
}
- (IBAction)pickImageFromCamera:(id)sender {
[self pickImageWithSourceType:UIImagePickerControllerSourceTypeCamera];
}
- (IBAction)pickImageFromLibrary:(id)sender {
[self pickImageWithSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}
- (IBAction)organizeResult:(id)sender {
if(!self.isSaved) {
BarcodeAppDelegate *applicationDelegate = (BarcodeAppDelegate *)[UIApplication sharedApplication].delegate;
[applicationDelegate addResultWithString:self.result];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Saved Result." message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];
self.saved = YES;
[self updateInterface];
}
}
- (IBAction)showActionSheet:(id)sender {
// Show action sheet for result.
[[ResultManager sharedResultManager] showActionSheetForResult:[[ResultManager sharedResultManager] resultFromString:self.result] fromToolbar:toolbar];
}
#pragma mark UIScrollViewDelegate
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return self.imageView;
}
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {
}
#pragma mark UINavigationControllerDelegate
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// Nothing to do yet.
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// Nothing to do yet.
}
#pragma mark UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)imagePickerController didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
self.image = image;
CGFloat scale = fmaxf(320.0f / image.size.width, 252 / image.size.height);
if(self.imageView != nil)
[self.imageView removeFromSuperview];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(0.0f, 0.0f, image.size.width * scale, image.size.height * scale);
[scrollView addSubview:imageView];
self.imageView = imageView;
[imageView release];
scrollView.contentSize = CGSizeMake(image.size.width * scale, image.size.height * scale);
scrollView.maximumZoomScale = 1 / scale;
scrollView.minimumZoomScale = 1.0f;
scrollView.contentOffset = CGPointZero;
self.result = nil;
textView.text = @"";
// Dismiss image picker.
[self.navigationController dismissModalViewControllerAnimated:YES];
[imagePickerController release];
[self updateInterface];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)imagePickerController {
[self.navigationController dismissModalViewControllerAnimated:YES];
[imagePickerController release];
}
#pragma mark BarcodeEngineDelegate
- (void)barcodeEngine:(BarcodeEngine *)barcodeEngine willDecodeImage:(UIImage *)image {
self.result = nil;
textView.text = nil;
self.activity = YES;
[self updateInterface];
}
- (void)barcodeEngine:(BarcodeEngine *)barcodeEngine didDecodeImage:(UIImage *)image withString:(NSString *)string {
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
self.result = string;
textView.text = string;
self.activity = NO;
self.saved = NO;
[self updateInterface];
BarcodeAppDelegate *applicationDelegate = (BarcodeAppDelegate *)[UIApplication sharedApplication].delegate;
if(applicationDelegate.scheme != nil)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://barcode?status=success&result=%@&userinfo=%@", applicationDelegate.scheme, string, applicationDelegate.userinfo]]];
}
- (void)barcodeEngine:(BarcodeEngine *)barcodeEngine didNotDecodeImage:(UIImage *)image {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Could not decode barcode!" message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];
self.activity = NO;
[self updateInterface];
BarcodeAppDelegate *applicationDelegate = (BarcodeAppDelegate *)[UIApplication sharedApplication].delegate;
if(applicationDelegate.scheme != nil)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://barcode?status=failed&userinfo=%@", applicationDelegate.scheme, applicationDelegate.userinfo]]];
}
- (void)barcodeEngineDidCancelOperation:(BarcodeEngine *)barcodeEngine {
self.activity = NO;
[self updateInterface];
BarcodeAppDelegate *applicationDelegate = (BarcodeAppDelegate *)[UIApplication sharedApplication].delegate;
if(applicationDelegate.scheme != nil)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://barcode?status=cancel&userinfo=%@", applicationDelegate.scheme, applicationDelegate.userinfo]]];
}
- (void)barcodeEngineDidStopOperation:(BarcodeEngine *)barcodeEngine {
[self updateInterface];
}
@end